学习心得
- 信息增益表示节点分裂后带来的不确定性的降低或者纯度的提高,准确说是随机变量X确定后,随机变量Y不确定性的平均减少量。这个本质上是二元随机概率密度关于x和y的一元概率密度的KL散度,由Jensen不等式也可以推出当且仅当X和Y独立时KL散度值为0,即刚才的信息增益值为0.
- 决策树根据不同的特征选择方案,分为了:ID3、C4.5、CART等算法。
- ID3使用【信息增益】选择测试属性。从直觉上讲,小概率事件比大概率事件包含的信息量大,即百年一见的事情比习以为常的事情包含的信息量大。信息增益 = 信息熵 - 条件熵。特征取值越多就意味着确定性更高,即条件熵越小,信息增益越大。
其中【熵】指信息量的大小,即表示随机变量的不确定性,熵越大,随机变量的不确定性越大。如果用p(ai)表示事件ai发生的概率,熵则表示为事件的信息量I(ai):
取任意随机变量的概率均相同时,不确定性越高,即均匀分布的信息熵最大。 - 信息增益的缺陷:泛化能力弱。如,引入特征DNA,每个人的DNA都不同,如果ID3按照DNA特征进行划分一定是最优的(条件熵为0),但这种分类的泛化能力很弱。因此C4.5就对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
ID3树 | C4.5树 | CART算法 | |
评价标准 | 信息增益 | 信息增益比(增益率) | 基尼指数 |
样本类型 | 离散型变量 | 连续型变量 | 连续型变量 |
任务 | 分类 | 分类 | 分类and回归(回归树使用最小平方误差) |
- CART树:
- 回归问题:用均方误差(MSE)或平均绝对误差(MAE)来替换熵和条件熵的位置。
- 分类问题:用基尼系数(CART将熵中的
在
处利用一阶泰勒展开,基尼系数定义为熵的线性近似)。
文章目录
- 学习心得
- 信息熵定理
- 三、注意事项
- 1. sklearn决策树中的random_state参数控制了哪些步骤的随机性?
- 2. 决策树如何处理连续变量和缺失变量?
- 3. 基尼系数是什么?为什么要在CART中引入它?
- 4. 什么是树的预剪枝和后剪枝?具体分别是如何操作的?
零、从一个栗子开始
通过信息增益计算的公式,我们可以计算我们的决策特征顺序,首先计算总的经验熵:
然后让A1、A2、A3、A4分别表示年龄、有工作、有自己房子和信贷情况4个特征,则计算年龄的信息增益为:
同理其他的工作、房子和信贷对应的信息增益可以计算:,可以比较发现特征A3(有自己的房子)的信息增益最大,所以我们选择特征A3作为第一个判定的特征。
一、信息论基础
1.1 节点纯度
树具有天然的分支结构。对于分类问题而言,决策树的思想是用节点代表样本集合,通过某些判定条件来对节点内的样本进行分配,将它们划分到该节点下的子节点,并且要求各个子节点中类别的纯度之和应高于该节点中的类别纯度,从而起到分类效果。
节点纯度:反映的节点样本标签的不确定性。
当一个节点的纯度较低时,说明每种类别都倾向于以比较均匀的频率出现,从而我们较难在这个节点上得到关于样本标签的具体信息,其不确定性较高。当一个节点的纯度很高时,说明有些类别倾向于以比较高的频率出现,有更多把握这个节点样本标签的具体信息,即确定性较高。
1.2 度量不确定性的函数H
那对于给定在个状态上定义的离散分布
如何定义度量不确定性的函数
,即
呢?香农(1916-2001)于1948年,在创造信息论的著名论文《A Mathematical Theory of Communication》中指出如下定理:
信息熵定理
(该定理证明见论文的Appendix 2)
若度量不确定性的函数满足三个信息熵条件,则
的形式只能是
其中,信息熵条件如下:
关于
是连续函数。
- 若
,则
关于
单调递增。
- 若将某一个
拆分为
和
,即
,则
(1)从构造和计算的角度而言,条件一是容易满足的。
(2)对于条件二而言,假设原来箱子里分别有10个球和100个球,加入每次摸到的球都是等概率抽出的,那么100个球的箱子产生的不确定性必然是要大于10个球的箱子产生的不确定性,即在等概率条件下关于
递增。
(3)条件三看上去比较复杂,但其意义是容易理解的,即个事件拆分为
个事件时的不确定性增加了,并且增加的不确定性与拆分时的比例和拆分事件的概率有关。举例来说:将
分别拆分为
和
,那么显然
增加的不确定性远超过
;同时,将
分别拆分为
,那么显然
增加的不确定性也远超过
。
由于指标 中的自变量
是对于某个随机变量
分布的描述,因此不妨将其记为信息熵
来反应
的不确定性。对于定义在有限状态集合
上的离散变量而言,对应信息熵的最大值在离散均匀分布时取到,最小值在单点分布时取到。此时,离散信息熵为
首先,我们需要定义当时
,原因在于
离散熵的极值问题是带有约束的极值问题,记和
,则约束条件为
,拉格朗日函数为
求偏导数后可解得,此时
。
补充材料:有关向量求导的内容可参考这个wiki页面中的描述。
对于离散随机变量,由于
故
从而
注意到对于,当
,即
时,
。因此,离散信息熵的最小值为0且在单点分布时取到。由于
是极值问题的唯一解,因此离散熵的最大值为
且在离散均匀分布时取到。
1.3 条件熵
在决策树的分裂过程中,我们不但需要考察本节点的不确定性或纯度,而且还要考察子节点的平均不确定性或平均纯度来决定是否进行分裂。子节点的产生来源于决策树分支的条件,因此我们不但要研究随机变量的信息熵,还要研究在给定条件下随机变量的平均信息熵或条件熵(
)。从名字上看,条件熵就是条件分布的不确定性,那么自然可以如下定义条件熵
为
对于离散条件熵,设随机变量所有可能的取值为
,上式可展开为
``
sklearn的sklearn.tree.DecisionTreeClassifier
的参数min_impurity_decrease
用来描述父节点的不纯度 - 子节点的不纯度:
上图源自sklearn的sklearn.tree.DecisionTreeClassifier介绍
1.4 信息增益
有了信息熵和条件熵的基础,我们就能很自然地定义信息增益(Information Gain),即节点分裂之后带来了多少不确定性的降低或纯度的提高。在得到了随机变量的取值信息时,随机变量
从直觉上说,随机变量关于
的信息增益一定是非负的,因为我们额外地知道了随机变量
的取值,这个条件降低了
的不确定性。下面我们就从数学角度来证明其正确性。
定理:设和
为离散随机变量,
关于
的信息增益
非负。
证明:
由信息增益的定义得:
从上式可以发现,信息增益在本质上就是
关于
的KL散度,而KL散度的非负性由Jensen不等式可得:
上述证明中的Jensen不等式的取等条件为
其实际意义为随机变量和
独立。这个条件同样与直觉相符合,因为如果
和
独立,那么意味着我们无论是否知道
的信息,都不会对
的不确定性产生影响,此时信息增益为0。
用信息增益的大小来进行决策树的节点分裂时,由于真实的分布函数未知,故用和
的经验分布(即频率)来进行概率的估计。若节点
每个分支下的样本数量为
,记
,
和
分别为节点中第k个类别的样本占节点总样本的比例和第m个子节点中第k个类别的样本数量占该子节点总样本的比例,则节点
分裂的信息增益定义为
【练习】
定义的联合熵为
为
对于两个离散随机变量X和Y,假设X取值集合为
,Y取值集合为
,其联合概率分布满足为
,则X和Y的联合熵(Joint Entropy)为
𝑋 和𝑌 的条件熵(Conditional Entropy)为
条件熵根据上面提到的定义也可以写成
(1)请证明如下关系:
1)
2)
在上面式子基础上结合即可。
3)
结合1)和2)(2)下图被分为了A、B和C三个区域。若AB区域代表X的不确定性,BC区域代表Y的不确定性,那么、
、
、
、
和
分别指代的是哪片区域?
答:指AB区域;
指BC区域;
指A区域;
指C区域;
指ABC区域;
指B区域。
二、分类树的节点分裂
2.1 ID3算法
对于每个节点进行分裂决策时,我们会抽出max_features
个特征进行遍历以比较信息增益的大小。特征的类别可以分为三种情况讨论:类别特征、数值特征和含缺失值的特征,它们各自的处理方法略有不同。
上图源自李航《统计学习方法》课件
对于类别特征而言,给定一个阈值,树的每一个节点会选择最大信息增益
对应的特征进行分裂,直到所有节点的相对最大信息增益
小于
,
和
分别指节点
的样本个数和整个数据集的样本个数,这种生成算法称为ID3算法。在sklearn中,
即为
min_impurity_decrease
。
2.2 C4.5算法
C4.5算法在ID3算法的基础上做出了诸多改进,包括但不限于:处理数值特征、处理含缺失值的特征、使用信息增益比代替信息增益以及给出树的剪枝策略。
PS:其中,剪枝策略将在第4节进行讲解,下面先对前3个改进的细节来进行介绍。
(1)处理数值特征
在处理节点数值特征时,可以用两种方法来将数值特征通过分割转化为类别,它们分别是最佳分割法和随机分割法,分别对应了sklearn中splitter
参数的best
选项和random
选项。
1)随机分割法
随机分割法下,取
其中代表特征最小值和最大值范围上的均匀分布,将节点样本按照特征
中的元素是否超过
把样本划分为两个集合,这等价于把数值变量转换为了类别变量。此时,根据这两个类别来计算树节点分裂的信息增益,并将它作为这个数值特征分裂的信息增益。
【练习】假设当前我们需要处理一个分类问题,请问对输入特征进行归一化会对树模型的类别输出产生影响吗?请解释原因。
【答】不会产生影响,最佳的信息增益是根据y的标签计算。
2)最佳分割法
最佳分割法下,依次令取遍所有的
,将其作为分割点,按照特征
中的元素是否超过
把样本划分为两个集合,计算所有
对应信息增益的最大值,并将其作为这个数值特征分裂的信息增益。
(2)处理含缺失值的特征
C4.5算法处理缺失数据,样本的缺失值占比越大,那么对信息增益的惩罚就越大,这是因为缺失值本身就是一种不确定性成分。设节点的样本缺失值比例为
,记非缺失值对应的类别标签和特征分别为
和
,则修正的信息增益为
【练习】如果将系数替换为
,请问对缺失值是加强了还是削弱了惩罚?
【答】削弱了惩罚项,即保留了更多,如=0.1,这样系数会变大。
当数据完全缺失时,信息增益为0;当数据没有缺失值时
,信息增益与原来的值保持一致。
(3)使用信息增益比代替信息增益
在C4.5算法中,使用了信息增益比来代替信息增益,其原因在于信息增益来选择的决策树对类别较多的特征具有天然的倾向性,例如当某一个特征(身份证号码、学号等)的类别数恰好就是样本数量时,此时由于
,即
达到最大值,因此必然会优先选择此特征进行分裂,但这样的情况是非常不合理的(会导致过拟合)。
上图源自李航《统计学习方法》课件
我们在第1节已经证明了,在类别占比均匀的情况下,类别数越多则熵越高,因此我们可以使用特征对应的熵来进行惩罚,即熵越高的变量会在信息增益上赋予更大程度的抑制,由此我们可以定义信息增益比为
在前面的部分中,我们讨论了单个节点如何选取特征进行分裂,但没有涉及到树节点的分裂顺序。例如下图所示,假设当前已经处理完了节点2的分裂,所有黄色节点(包括2号节点)都是当前已经存在的树节点,那么我们接下来究竟应该选取叶节点3号、4号和5号中的哪一个节点来继续进行决策以生成新的叶节点6号和7号?
在sklearn中提供了两种生长模式,它们分别被称为深度优先生长和最佳增益生长,当参数max_leaf_nodes
使用默认值None时使用前者,当它被赋予某个数值时使用后者。
- 深度优先生长采用深度优先搜索的方法:若当前节点存在未搜索过的子节点,则当前节点跳转到子节点进行分裂决策;若当前节点为叶节点,则调转到上一层节点,直到根节点不存在未搜索过的子节点为止。对上图而言,当前节点为2号,它的两个子节点4号和5号都没有被搜索过,因此下一步则选择两个节点中的一个进行跳转。
当决策树使用最佳增益生长时,每次总是选择会带来最大相对信息增益的节点进行分裂,直到叶节点的最大数量达到max_left_nodes
。
【练习】如果将树的生长策略从深度优先生长改为广度优先生长,假设其他参数保持不变的情况下,两个模型对应的结果输出可能不同吗?
【答】不影响。如果使用max_left_nodes
则一定会使用最佳优先生长,但当参数max_leaf_nodes
使用默认值None时为深度优先生长。
三、注意事项
1. sklearn决策树中的random_state参数控制了哪些步骤的随机性?
关于sklearn的sklearn.tree.DecisionTreeClassifier
可以参考官网。
random_state
参数控制了特征选择的随机性,类似random.seed()
,能够保证决策树模型复现的结果相同,便于模型参数调优。
另外,splitter
控制决策树中的随即选项:
1)最佳分割法即best
参数:决策树在分支时虽然随机,但还是会优先选择更重要(按照不纯度设置的基尼系数或信息熵的值)的特征进行分支。
2)随机分割法即random
参数:决策树在分支时更加随机,树会因为含有更多的不必要信息而更深更大,从而导致过拟合。
2. 决策树如何处理连续变量和缺失变量?
ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。
- C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换为多个取值区间的离散型变量。
- CART构建时每次都会对特征进行二值划分,能很好适用于连续性变量。
【处理连续变量】
C4.5算法在处理节点数值特征时,可以用两种方法来将数值特征通过分割转化为类别,它们分别是最佳分割法和随机分割法,分别对应了sklearn中splitter
参数的best
选项和random
选项。
【处理含缺失值的特征】
C4.5算法处理缺失数据的思想非常简单,样本的缺失值占比越大,那么对信息增益的惩罚就越大,这是因为缺失值本身就是一种不确定性成分。设节点的样本缺失值比例为
,记非缺失值对应的类别标签和特征分别为
和
,则修正的信息增益为
当数据完全缺失时,信息增益为0;当数据没有缺失值时
,信息增益与原来的值保持一致。
3. 基尼系数是什么?为什么要在CART中引入它?
当处理分类问题时,虽然ID3或C4.5定义的熵仍然可以使用,但是由于对数函数的计算代价较大,CART将熵中的
在
处利用一阶泰勒展开,基尼系数定义为熵的线性近似,即由于
从而定义基尼系数为
4. 什么是树的预剪枝和后剪枝?具体分别是如何操作的?
一棵完全生长的决策树会导致过拟合,如考虑DNA特征(每个人的DNA不同),完全生长的决策树所对应的每个叶结点中只会包含一个样本(会导致决策树过拟合,即在训练集上预测效果差)。为了提高模型泛化能力,需要对决策树进行剪枝。
(1)预剪枝
1)当树到达一定深度的时候,停止树的生长。
2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。
(2)后剪枝
先让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝时将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则判断。
Reference
[1] 陈希孺编著.概率论与数理统计[M].中国科学技术大学出版社,2009
[2] B 站视频教程:https://www.bilibili.com/video/BV1Mh411e7VU
[3] 线上南瓜书:https://datawhalechina.github.io/pumpkin-book/#/chapter1/chapter1
[4] 开源地址:https://github.com/datawhalechina/pumpkin-book