技术标签: 基尼系数 CART决策树算法 算法 机器学习 决策树算法
今天给大家带来的主要内容包括:决策树算法、基尼系数和CART决策树算法。废话不多说,下面就是本文的全部内容了!
假设有这么一个例子,小明毕业后来到一家银行当行长,上班第一天就有15位客人申请了贷款,刚刚入行的小明仔细整理了客户的基本信息,这些基本信息包括:
经过深思熟虑后,小明逐一审查了这15份申请,并做了相应批复:
但是小明觉得这工作量实在是太大了,如果可以想一个办法快速的判断一个用户是否可以申请贷款呢?
经过几天几夜的努力思考后,小明根据客户的基本信息尝试得出结论:
如果以少数服从多数为原则的话,可以得出结论:有工作的客户就会被批准,而没有工作的客户就会被直接拒绝。以上方法得到的结果显然和样本绝大部分的结果都相悖,所以按照工作为标准并不可行
如果仍以少数服从多数为原则的话,那么可以得出结论:信誉非常好或者好的客户就会被批准,而信誉一般的客户就直接拒绝。以上方法得到的结果显然和样本绝大部分的结果仍然都相悖,所以按照信誉为标准也不可行
还是以少数服从多数为原则,可以得出结论:如果客户有工作,那么可以批准贷款;如果没有工作,我们再考虑他的信誉情况做出判断。通过以上方法得到的结果的正确率显然比前两种方法的正确率更高一些。这种方法就是利用决策树(Decision Tree)算法进行决策分类的过程,这种方法称为决策树算法的原因就是因为通过判断得到结果的过程分支很像一棵树,故而得名决策树算法
当小明发现决策树算法可以帮他快速进行客户申请的结果判断后,他非常高兴。假设此时有一个新客户的贷款申请,此客户没有工作,但是信誉非常好(忽略房子的因素),小明就可以按照上面介绍的决策树算法直接得出结论:
在刚才的决策树算法中,我们先按照是否有工作分类,又按照信誉等级进行分类,并且只考虑了这两种因素。那么我们目前就面临两个问题:
刚才我们提到了,应该如何构建决策树呢?应该如何选择合理的因素呢?又应该如何选择多个因素合理的顺序呢?也就是说我们应该选择一个合理的标准,来作为决策树的分类节点,这个时候我们就需要对我们选择的标准进行好坏的判断,而标准的好坏可以用一个值来定义,这个值被称为基尼系数(Gini Index):
Gini = 1 − ∑ k = 1 K p k 2 \operatorname{Gini}=1-\sum_{k=1}^{K} p_{k}^{2} Gini=1−k=1∑Kpk2
其中 p k ( 1 ≤ k ≤ K ) p_{k}(1≤k≤K) pk(1≤k≤K)是某一类别出现的概率,所以基尼系数的定义就是:1减去所有类别出现的概率的平方和。根据以上定义,就可以得到在我们这个二元分类问题中的基尼系数为:
G i n i = 1 − p ( 批准 ) 2 − p ( 拒绝 ) 2 Gini=1-p(\text{批准})^{2}-p(\text{拒绝})^{2} Gini=1−p(批准)2−p(拒绝)2
刚才我们也提到了,可以使用基尼系数来确定当前标准的好坏:
所以基尼系数的含义为当前标准的不确定程度,以上面的例子举例来说:
当 p ( 批准 ) = 1 , p ( 拒绝 ) = 0 p(\text{批准})=1,p(\text{拒绝})=0 p(批准)=1,p(拒绝)=0时:
G i n i = 1 − 1 − 0 = 0 Gini=1-1-0=0 Gini=1−1−0=0
当 p ( 批准 ) = 0 , p ( 拒绝 ) = 0 p(\text{批准})=0,p(\text{拒绝})=0 p(批准)=0,p(拒绝)=0时:
G i n i = 1 − 0 − 1 = 0 Gini=1-0-1=0 Gini=1−0−1=0
当 p ( 批准 ) = 0.5 , p ( 拒绝 ) = 0.5 p(\text{批准})=0.5,p(\text{拒绝})=0.5 p(批准)=0.5,p(拒绝)=0.5时:
G i n i = 1 − 0.25 − 0.25 = 0.5 Gini=1-0.25-0.25=0.5 Gini=1−0.25−0.25=0.5
我们也可以通过下图更直观的看出基尼系数随概率的变化。我们可以看到,当客户一定被拒绝,或者一定被批准的情况下,这种确定性会得到一个接近于零的基尼系数;而如果我们认为客户被拒绝和批准的概率一样时,基尼系数值会达到最大值。
那么根据以上分析,我们只需要选择基尼系数最小的条件来作为决策树下一级分类的标准就可以了。再回到我们上面讲述的例子中。首先我们不考虑任何标准,根据贷款结果直接计算数据的基尼系数:
可以看到当我们不选用任何标准时的基尼系数非常大,此时的数据类似于随机生成的,这也就意味着当前的贷款结果有着很大的不确定性。
很明显不考虑任何标准就莽撞地分类,那么分类结果一定不好,所以我们应该考虑选取最佳的分类标准,我们首先考虑“工作”这个分类标准,整个计算过程如下所示:
以此类推,按照上面的做法,我们也可以计算得到以房子和信誉作为分类标准的基尼系数:
我们比较上面计算得到的四个基尼系数,可以发现以房子作为分类结果的基尼系数最小,所以我们应该首先按照“房子”这个分类标准来构建决策树:
如果客户有房子,可以直接批准他的贷款,所以决策树左边的节点已经被分类好了;那如果客户没有房子,我们也不能直接拒绝客户的贷款,而是应该考虑决策树右边节点的标准,这个时候我们只需要考虑那些没有房子的客户就可以了,以这些没有房子的客户样本作为新的集合,计算剩余所有标准的基尼系数:
可以看到,其中以工作作为分类标准的基尼系数为零,是最低的基尼系数值,所以我们选择工作作为下一步分类的标准:
这样,我们就把所有的类别都分类好了,这就是决策树的生成过程。这种以基尼系数为核心的决策树算法就称为CART决策树算法(Classification and Regression Tree)。
另外还有一点需要注意,我们一般看到的决策树都是二叉树的构造形式,这只是一种个人选择,并不是强制要求。这样做的目的只是为了方便处理连续的变量,如果样本分布在0~100之间,在没有具体的切割要求下,我们一般取平均数作为切割点,这样就自然地生成了一棵二叉树。
以上就是本文的全部内容了,这个系列还会继续更新,给大家带来更多的关于机器学习方面的算法和知识,下篇博客见!
文章浏览阅读268次。网上一些校正系统时间的方法,大多需要手动操作,有没有什么工具可以自动完成相关的操作呢? 可以试试NetTime工具(http://www.timesynctool.com/).安装该工具时会创建一个自启动服务,以后每次启动系统,它都会随之启动并自动校正系统时间。_timesync 自动
文章浏览阅读2.3k次。即使我们使用了类似 *{margin: 0;padding: 0;} 这样的代码重置了浏览器默认样式,也会发现类似标签这种inline-block元素,它们之间也还存在着间距。demo:默认情况123456789101112131415_css处理手机自动留白安全距离
文章浏览阅读2.0k次,点赞14次,收藏17次。第一章、概述1.1.1数据分析:采用适当的统计分析方法对收集到的数据进行分析、概括和总结,对数据进行恰当的描述,提取出有用的信息的过程。1.1.2数据挖掘:从海量数据种通过相关的算法来发现隐藏在数据中的规律和知识的过程。1.1.3知识发现的过程1.1.4数据分析与数据挖掘的区别1.1.5数据分析与数据挖掘的联系数据-------数据分析----->信息-------数据挖掘-------->知识1.2分析与挖掘的数据类型1.3数据分析..._数据分析与数据挖掘
文章浏览阅读312次。Python实现WOA智能鲸鱼优化算法优化XGBoost分类模型(XGBClassifier算法)项目实战_鲸鱼算法 xgboost
文章浏览阅读3.9k次。android.webkit.WebView/WebViewClient/WebChromeClient使用android.webkit.WebView控件在xml布局文件中定义 android:id=”@+id/webkit01” android:layout:width=”fill_parent” android:layout:height=”fill_par_android.webkit.webview
文章浏览阅读6.5k次,点赞9次,收藏186次。基于Matlab实现图像处理常用应用案例(附上100个案例源码)_matlab图像处理实例详解
文章浏览阅读5.4k次。2)完全二叉树中如果每颗子树的最大值都在顶部就是大根堆3)完全二叉树中如果每颗子树的最小值都在顶部就是小根堆4)堆结构的向上调整和向下调整算法向上调整向下调整5)堆结构某个元素的增大和减少6)优先级队列结构就是堆结构空树是完全二叉树,完全二叉树的性质:如果父亲下标为i : 左孩子:2*i+1 右孩子: 2*i+2如果孩子下标为i: 父亲的下标:(i-1)/2。_堆排序例题
文章浏览阅读2.8k次。HotSpot VM_hotspot虚拟机
文章浏览阅读1.1k次。导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的容器调度技术!作者:阿里中间件,公众号:云栖社区本文以资源分配理念:拍卖、预算、抢占出发,引出Bor..._资源调度编排种类
文章浏览阅读2w次,点赞43次,收藏94次。Matplotlib解决多子图时的间距问题Create SubplotsAdjust Spacing of Subplots Using tight_layout()Adjust Spacing of Subplot TitlesAdjust Spacing of Overall Title参考链接Often you may use subplots to display multiple plots alongside each other in Matplotlib. Unfortunately, t_matplotlib 子图间隔
文章浏览阅读1.8w次,点赞14次,收藏50次。最近在使用msys2的时候,无法使用pacman -Syu进行更新,会出现如下提示:原因是密钥无法信赖(rely on)msys2-keyring密钥服务器。msys2官方提供了以下方法:# pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{.sig,}解决办法:1. 下载 msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz 软件包# curl -O http://repo.msys_由 msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig 认定的签名无法验证
文章浏览阅读647次。的博客地址:https://juejin.cn/user/3597257779197021介绍 WindowManagerService 简称 WMS ,是系统的核心服务,主要分为四大部分,分别是窗口管理,窗口动画,输入系统中转站和Surface 管理 。WMS 的职责很多,主要的就是下面这几点:窗口管理:WMS是窗口的管理者,负责窗口的启动,添加和删除,另外窗口的大小也时有 WMS 管理的,管理..._android windowmanagerpolicy详解