决策树:什么是基尼系数(“杂质 增益 指数 系数”辨析)「建议收藏」

决策树:什么是基尼系数(“杂质 增益 指数 系数”辨析)「建议收藏」决策树:什么是基尼系数在我翻译学习这篇RandomForestsforCompleteBeginners的时候,对基尼系数和它相关的一些中文表达充满了疑问,查了一些资料以后,完成了这篇文章。其中基尼杂质系数的计算和解释参考了ASimpleExplanationofGiniImpurity。如果你查看scikit-learn中DecisionTreeClassifier的文…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

决策树:什么是基尼系数

在我翻译学习这篇Random Forests for Complete Beginners的时候,对基尼系数和它相关的一些中文表达充满了疑问,查了一些资料以后,完成了这篇文章。其中基尼杂质系数的计算和解释参考了A Simple Explanation of Gini Impurity。

如果你查看scikit-learn中DecisionTreeClassifier的文档,你会看到这样的参数:
scikit学习
RandomForestClassifier文档里也谈到了gini。那么两者都提到并作为默认标准的基尼系数是什么?

名词辨析

你在不同的地方往往能看到关于基尼的不同名词,我查询了一大堆文献,发现它们的使用遵循以下规律:

  • 基尼杂质系数/基尼不纯系数(Gini Impurity):等效于我们通常说的基尼系数,在上面提到的分类器文档里的就是它,计算方法在后面将提到。
  • 基尼增益系数/基尼系数增益(Gini Gain):表征某个划分对基尼系数的增益,使用原基尼杂质系数减去按样本占比加权的各个分支的基尼杂质系数来计算,计算方法在后面将提到。
  • 基尼指数(Gini index):这是一个尴尬的问题,因为有人把它等价于gini impurity,但也有人把它用作gini coefficient。需要结合上下文来判断。
  • 基尼系数(Gini coefficient):表征在二分类问题中,正负两种标签的分配合理程度。当G=0,说明正负标签的预测概率均匀分配,模型相当于是随机排序。这个名词也在经济学中也有使用,本质是相同的,是用来表征一个地区财富的分配的合理程度。当G=0,说明财富均匀分配。

基尼杂质系数(Gini Impurity)的理解和计算

训练决策树包括将当前数据分成两个分支。假设我们有以下数据点:
在这里插入图片描述
现在,我们的分支里有5个蓝点和5个绿点。
如果我们在x=2处进行划分:
在这里插入图片描述
这很明显是个完美划分,因为它把数据集分成了两个分支:

  • 左分支全是蓝点
  • 右分支全是绿点

但如果我们在x=1.5处进行划分呢?
在这里插入图片描述
这个划分把数据集分成了两个分支:

  • 左分支,4个蓝点
  • 右分支,1个蓝点+5个绿点

很明显,这种划分更糟糕,但我们如何量化呢?

解决方法就是基尼杂质系数。

示例1:整个数据集

我们来计算整个数据集的基尼杂质系数。

如果随机选择一个数据点并随机给它分类,我们错误分类数据点的概率是多少?

我们的选择 实际的分类 可能性 对错
蓝 蓝 25% ✓
红 蓝 25% ❌
蓝 红 25% ❌
红 红 25% ✓

我们只在上面的两个事件中对其进行了错误的分类。因此,我们的错误概率是25% + 25% = 50%,也即基尼杂质系数是0.5.

公式
G = ∑ i = 1 C p ( i ) ∗ [ 1 − p ( i ) ] G = \sum_{i=1}^C {p(i)*[1-p(i)]} G=i=1∑C​p(i)∗[1−p(i)]

  • C: 类别数
  • p(i):一个样本被归类进第i类的概率

上面这个例子计算式即为:
G = p ( 1 ) ∗ [ 1 − p ( 1 ) ] + p ( 2 ) ∗ [ 1 − p ( 2 ) ] = 0.5 ∗ [ 1 − 0.5 ] + 0.5 ∗ [ 1 − 0.5 ] = 0.5 \begin{aligned} G&=p(1)*[1-p(1)]+p(2)*[1-p(2)]\\ &=0.5*[1-0.5]+0.5*[1-0.5]\\ &=0.5 \end{aligned} G​=p(1)∗[1−p(1)]+p(2)∗[1−p(2)]=0.5∗[1−0.5]+0.5∗[1−0.5]=0.5​

示例2:完美划分

完美划分后数据集的基尼杂质系数是多少?
在这里插入图片描述
左分支的基尼杂质系数:
G l e f t = 1 ∗ ( 1 − 1 ) + 0 ∗ ( 1 − 0 ) = 0 G_{left}=1∗(1−1)+0∗(1−0)=0 Gleft​=1∗(1−1)+0∗(1−0)=0

右分支的基尼杂质系数:
G r i g h t = 0 ∗ ( 1 − 0 ) + 1 ∗ ( 1 − 1 ) = 0 G_{right}=0∗(1−0)+1∗(1−1)=0 Gright​=0∗(1−0)+1∗(1−1)=0

它们没有杂质,所以基尼杂质系数自然为0!此时就是最优情况。

示例3:不完美划分

那不完美划分呢?
在这里插入图片描述
易知左分支:
G l e f t = 0 G_{left}=0 Gleft​=0

右分支:
G r i g h t = 1 6 ∗ ( 1 − 1 6 ) + 5 6 ∗ ( 1 − 5 6 ) = 5 18 = 0.278 \begin{aligned} G_{right}&=\frac{1}{6}*(1-\frac{1}{6})+\frac{5}{6}*(1-\frac{5}{6})\\ &=\frac{5}{18}\\ &=0.278 \end{aligned} Gright​​=61​∗(1−61​)+65​∗(1−65​)=185​=0.278​

划分的选择

终于到了回答之前提出问题的时候了:我们如何量化划分的效果?

对这个划分:
在这里插入图片描述
我们已经计算了基尼系数杂质:

  • 划分前(整个数据集):0.5
  • 左分支:0
  • 右分支:0.278

我们将基于每个分支中的样本占比来进行加权来以确定划分的基尼增益。由于左分支有4个样本,右分支有6个样本,我们得到:
( 0.4 ∗ 0 ) + ( 0.6 ∗ 0.278 ) = 0.167 (0.4∗0)+(0.6∗0.278)=0.167 (0.4∗0)+(0.6∗0.278)=0.167

因此,我们用这个划分“降低”的杂质量是
0.5 − 0.167 = 0.333 0.5−0.167=0.333 0.5−0.167=0.333

这就被称为基尼增益系数。越好的划分基尼增益系数越大,比如此处0.5>0.333.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184168.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 工业大数据为何落地难

    工业大数据为何落地难

    2021年11月22日
  • 魔兽世界私服架设_魔兽大服务器合并列表

    魔兽世界私服架设_魔兽大服务器合并列表都说魔兽世界是最经典的网游,可惜我沉迷于程序的世界,都没有机会去体会一下!正好看了别人一篇blog,写着怎么架设魔兽世界,想想我就自己动手架一个看看了!等弄完之后,发现,那个服务器是2.3的客户端吧,好像!现在都3.13了,根本没用,后来到去sf.net找了一下,用svn把代码down下来,都很老了。后来啃了一点英文,才发现,现在源码管理已经迁移到git上面了。题外话,这个就是linux之

    2022年10月6日
  • ZIP 压缩解压命令

    ZIP 压缩解压命令压缩一个文件,打开cmd窗口 zip f:\wenjian.zip f:\wenjian.txt压缩一种格式的文件 zip f:\wenjian.zip f:\*.txt压缩文件夹及里面的内容 -r表示压缩文件夹wenjian及里面的内容 zip-rf:\wenjian.zip wenjian  移除压缩包里的一

    2022年5月16日
  • 动态规划——背包问题(c语言)

    动态规划——背包问题(c语言)/*背包问题:背包所能容纳重量为10;共五件商品,商品重量用数组m存储m[5]={2,2,6,5,4},每件商品的价值用数组n存储,n[5]={6,3,5,4,6};求背包所能装物品的最大价值。

    2022年7月1日
  • SIM简介「建议收藏」

    SIM简介「建议收藏」5月17日,国际电信日。在这天,北京通信公司开始对北京城里的政府单位医疗机构等集体发放小灵通号码,随着小灵通在北京市区的出现,以及中国南北两大电信公司的互联互通,网通电信移动联通4足鼎立的局面已经形成,传统的高价资费模式已经被打破,单向收费和准单向收费成为人们最津津乐道的话题。现在全国各地移动联通公司纷纷推出价格便宜、针对不同阶层的手机卡。我为大家介绍一下中国的手机品牌卡以所支持的功能,希望能为即…

    2022年10月7日
  • SQL IF语句的使用

    SQL IF语句的使用备忘笔记侵删转载https://www.cnblogs.com/xuhaojun/p/9141396.htmlSQL的IF语句MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:IF表达式IF(expr1,expr2,expr3)如果expr1是TRUE(expr1<>0andexpr1<>NULL),则IF()的返回值为expr2;否则返回值则为expr3。IF()的返回值为数字值或字符串值,具体情

    2022年7月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号