浅谈对于《机器学习》(周志华)第四章4.2.3基尼系数与CART决策树学习算法的个人理解

《机器学习》一书有两个星期没看,进度停滞在了第四章的结尾部分。
重读这一大部分内容,原著对基尼系数和CART决策树仅有短短半页的描述,通过从网络上的调查和文献的阅读对其有了更详细的理解。

基尼系数(Gini index)

从我看到过得内容中,我认为较为好理解的定义应该是:
定义基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。
如上面定义所说的,基尼系数反映的就是样本被分错的概率,简单直观地来说,基尼系数反映了从数据集D中随机抽取两个样本,类别标记不同的概率。如果我们设基尼系数为G,设好瓜(西瓜书中所有的例子都是好瓜坏瓜)为x,坏瓜为y,那么G=1-((x/(x+y))**2)-((y/(x+y))**2)。公式如下:
在这里插入图片描述

基尼系数反应的就是数据集的纯度,Gini index与纯度呈“反比”(只是比方,这种表述并不准确!)
下图就是刚刚举的例子(以此类推)。
在这里插入图片描述
综上所述,有以下三点说明!
1、Pk表示选中的样本属于k类别的概率,那么这个样本被分错的概率是1-Pk。
2、样本集合中有k个类别,一个随机选中的样本可以属于这k各类别样本中的任意一个,因此对于不同类别加和即可。
3、当为二分类时。Gini§ = 2p*(1-p)!

最后附上一个简单的求解基尼系数的小程序

def GiniIndex(x,y):
    singleGiniIndex = 1-((x/(x+y))**2)-((y/(x+y))**2)
    return singleGiniIndex

def Gini_Index(a,b,c,d):
    left = GiniIndex(a,b)
    right = GiniIndex(c,d)
    finalGiniIndex = left*((a+b)/(a+b+c+d))+right*((c+d)/(a+b+c+d))
    return finalGiniIndex

def main():
    print(Gini_Index(105,39,34,125))

if __name__ == "__main__":
    main()

可以计算出结果
在这里插入图片描述

引入CART决策树学习算法

CART是Classification and Regression Tree的简称,这是一种著名的决策树学习算法,分类和回归任务都可使用.而CART算法与“基尼系数”挂钩,他使用基尼系数选择划分属性,比较直白的来说,CART算法就是“选择那个使得划分后基尼系数最小的属性作为最优化分属性”.
即:a = arg min Gini_index(D,a) a∈A;*
(分类树:基尼系数最小准则,回归树与之不同,为平方误差最小准则!!!)

过程总结

1.设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1和D2两部分,计算A=a时的Gini系数。
2.在所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3.对两个子结点递归地调用步骤l~2,直至满足停止条件。
4.生成CART决策树。

举例?

我们讨论的是通过CART算法生成决策树以判断心脏病的例子
在这里插入图片描述
条件分别为:胸痛、血液循环、动脉堵塞。注意一下,如果统计的时候出现了“缺失值”,我们跳过处理即可。
假设我们已经拥有了数据,我们先来为三种情况计算一下Gini index。
在这里插入图片描述
经过计算,胸痛左分支的Gini index为0.396,右边为0.336,整体为0.364,血液循环的Gini index为0.36,动脉堵塞的Gini index为0.381,选取最小的Gini index->Good Blood Circulation!
那么血液循环就作为根节点开始分支。
这之后,还要将根节点生成的分支与Gini(胸痛)以及Gini(动脉阻塞)进行比较,选取最小的进行再分支,目前看来,只要基尼系数可以下降,使其纯度变高,那么就要分支!
在这里插入图片描述

The process:

①Calculate all of the Gini impurity scores.
②If the node itself has the lowest score,than there is no point in separating thepatients any more and it becomes aleaf node.
③If separating the data resultsin an improvement, than pickthe separation with the lowestimpurity value.
在这里插入图片描述
正如上文提到的,模仿左子树的构建方法,右子树也就轻而易举地构建出来了!
请注意,CART算法的缺点如下:
①无论是ID3, C4.5还是CART,在做特征选择的时候都是选择最优的一个特征来做分类决策,但是大多数,分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的。这样决策得到的决策树更加准确。
②如果样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习里面的随机森林之类的方法解决。
在这里插入图片描述
鸣谢以下参考书籍及网站
[1]. 周志华 机器学习 清华大学出版社,2016
[2].https://blog.csdn.net/zrh_CSDN/article/details/81022696
[3].https://blog.csdn.net/Andy_shenzl/article/details/83900499
[4].https://blog.csdn.net/waeceo/article/details/90473448
[5]. https://www.youtube.com/watch?v=g9c66TUylZ4

P.S.
想写好一篇文章,真的会花费很多心思
我VS code的Color Theme还挺好看的吧,冷冷的感觉
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值