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

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

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

Jetbrains全系列IDE稳定放心使用

决策树:什么是基尼系数

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

如果你查看scikit-learnDecisionTreeClassifier的文档,你会看到这样的参数:
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=1Cp(i)[1p(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)[1p(1)]+p(2)[1p(2)]=0.5[10.5]+0.5[10.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(11)+0(10)=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(10)+1(11)=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(161)+65(165)=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.40)+(0.60.278)=0.167

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

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

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

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

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


相关推荐

  • 语音检测_自适应遗传算法

    语音检测_自适应遗传算法自适应回声消除算法欢迎留言交流AEC算法早期用在Voip,电话这些场景中,自从智能设备诞生后,智能语音设备也要消除自身的音源,这些音源包括音乐或者TTS机器合成声音。本文基于开源算法阐述AEC的原理和实现,基于WebRTC和speex两种算法,文末会附上两种算法的matlab实现。回声消除原理回声消除的基本原理是使用一个自适应滤波器对未知的回声信道:ω\omega进行参数辨识,根据扬声器信号与产

    2022年10月22日
    0
  • python屏幕文字识别_python识别图片文字

    python屏幕文字识别_python识别图片文字因为学校要求要刷一门叫《包装世界》的网课,而课程里有200多道选择题,而且只能在手机完成,网页版无法做题,而看视频是不可能看视频的,这辈子都不可能看…所以写了几行代码来进行百度搜答案。思路如下:手机屏幕投影到电脑上;截图并识别图片文字;调用百度来进行搜索;提取html关键字。环境配置:python3.6、第三方库:pyautogui、PIL、pytesseract、识别引擎tesseract-…

    2022年6月6日
    72
  • 《开源安全运维平台-OSSIM最佳实践》已经上市

    《开源安全运维平台-OSSIM最佳实践》已经上市经多年潜心研究开源技术,历时三年创作的《开源安全运维平台OSSIM最佳实践》一书即将出版。该书用100多万字记录了作者10多年的OSSIM研究应用成果,重点展示了开源安全管理平台OSSIM在大型企业网运维管理中的实践。国内目前也有各式各样的运维系统,经过笔者对比分析得出这些工具无论在功能上、性能上还是在安全和稳定性易用性上都无法跟OSSIM系统想媲美,而且很多国内的开源安全运维项目在发布几年后就逐步淡出了舞台,而OSSIM持续发展了十多年。

    2022年10月25日
    0
  • SDN基本概念

    SDN基本概念

    2021年4月15日
    224
  • android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]

    android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]Glide缓存简介Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。内存缓存和硬盘缓存的相互结合才构成了Glide极佳的图片缓存效果,那么接下来我们就分别来分析一下这两种缓存的使用方法以及它们的实现原理。我认识很多优秀的Android工程师,他们丝毫

    2022年5月3日
    56
  • 毕业季—校长寄语

    毕业季—校长寄语

    2022年1月18日
    54

发表回复

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

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