常见树模型节点分裂方式总结
信息增益是树模型,比如ID3算法用来寻早最优特征分割点的计算标准了解信息增益之前, 需要了解熵
熵
信息增益与熵(entropy)有关,在概率论中,熵是随机变量不确定性的度量,熵越大,随机变量的不确定性就越大;假设\(X\)是取有限个值的离散随机变量,其概率分布为:
则,熵的定义为:
一般取自然对数\(e\)为底数
值得注意的是,熵实际上是随机变量\(X\)的分布的泛函数,它并不依赖\(X\)的实际取值,而仅仅依赖\(X\)的概率分布,所以它又可以被记作:
其中, \(n\)表示\(X\)的\(n\)种不同的取值, 这个值一般是离散的. \(p_i\)表示为\(X\)取到值为\(i\)的概率.\(log\)一般是自然底数
考虑如下数据集\(D\):
那么整个数据集的熵就是正类和负类的熵之和
信息增益
信息增益可以理解为分类前的信息熵减去分类后的信息熵
条件熵
多个变量的熵叫联合熵, 比如两个变量\(X,Y\)的联合熵就表示为:
类似于条件概率,熵同样也存在着条件熵, 条件熵描述了知道某个变量以后, 剩下的变量的不确定性, 其表达式如下:
\(H(X)\)度量了\(X\)的不确定性, \(H(X|Y)\)度量了知道\(Y\)后,\(X\)的不确定性, 那么\(H(X)-H(X|Y)\)度量的可以理解为:知道\(Y\)的基础上, \(X\)不确定性减少的程度,我们记为\(I(X,Y)\),信息增益如图如图:
假定当前样本集合\(D\)中,第\(k\)类样本所占比例为\(p_k(k=1,2,3...,|y|)\), 则\(D\)的信息熵定义为:
假定离散属性\(a\)有\(V\)个可能的取值\({a^1,a^2...a^v}\), 若使用\(a\)来对样本集进行划分,则会产生\(V\)个分支结点, 也就是说, ID3构建的决策树, 是多叉树, 那么它的信息增益就是
我们计算特征\(a_3\)的信息增益, 因为\(a_3\)是连续变量. 我们在处理的时候, 一般将连续的变量离散化, 或者可以通过二分法将数据分为2个集合, 那么我们有划分点的集合:
通常,使用二分法的时候, 需要对特征进行排序, 这样是为了简化计算,避免重复的计算
经过排序后, 数据变为:
1 3 4 4 5 6 7 7 8
+ - + + - - - + -
假设我们以排序后的第一个样本和第二个样本进行分割, 那么我们可以得到分割点为(1+3)/2=2
大于2的样本只有8个, 小于2的样本有1个,考虑上正负类的结果:
按照这个步骤, 我们能计算出\(a_3\)特征的每个分裂点的熵, 我们选择熵最小的作为分裂结点, 因为这样能导致信息增益最大
假设我们的分裂结点刚好是2, 那么\(a_3\)特征的信息增益为:
Gini系数
假设有\(K\)个类,第\(k\)个类的概率为\(p_k\), 则基尼系数的表达式为:
对于二分类问题, 则公式可以简化为: \(Gnini(p)=2p(1-p)\), p代表属于第一类样本的概率
对于给定的样本集合\(D\), \(K\)个类, 第\(k\)个类别的数量为\(C_k\), 则样本\(D\)的基尼系数为:
显然, 对于集合\(D\),假设属性\(A\)的某个值\(a\)将数据集D切分为\(D_1,D_2\),则在特征A的条件下, D的基尼系数表达式为:
相比于复杂的对数运算, 基尼系数的运算简单很多, 对于连续值得处理, 也是像上面一样连续二分连续特征
比如, 我们计算\(a_1\)的Gini系数:
最后, 我们选择Gini系数最大的就可以了
总结
信息增益: 以某特征划分数据集前后的熵的差值
在熵的理解那部分提到了,熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
信息增益的理解:对于待划分的数据集D,其 entroy(前)是一定的,但是划分之后的熵 entroy(后)是不定的,entroy(后)越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高),因此 entroy(前) - entroy(后)差异越大,说明使用当前特征划分数据集D的话,其纯度上升的更快。而我们在构建最优的决策树的时候总希望能更快速到达纯度更高的集合,这一点可以参考优化算法中的梯度下降算法,每一步沿着负梯度方法最小化损失函数的原因就是负梯度方向是函数值减小最快的方向。同理:在决策树构建的过程中我们总是希望集合往最快到达纯度更高的子集合方向发展,因此我们总是选择使得信息增益最大的特征来划分当前数据集D。
缺点: 信息增益偏向取值较多的特征
原因: 当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较 偏向取值较多的特征。
Gini系数
尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。
树模型与高维稀疏特征
通常情况下,如果遇到高维稀释特征的话,树模型很容易过拟合,而且常常表现得不如带正则的线性模型。主要的原因有:
- 高维sparse特征下,叶子节点分裂会存在bias
假设有1w 个样本, y类别0和1,100维特征,其中10个样本都是类别1,而特征 f1的值为0,1,且刚好这10个样本的 f1特征值都为1,其余9990样本都为0.这种情况在树模型的时候,很容易优化出含一个使用 f1为分裂节点的树直接将数据划分的很好,但是当测试的时候,却会发现效果很差,因为这个特征只是刚好偶然间跟 y拟合到了这个规律,这就比较容易导致过拟合。而对于带有正则项的线性模型来说,正则项是对权重的惩罚,也就是 W1一旦过大,惩罚就会很大,进一步压缩 W1的值,使他不至于过大,而树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等以及像xgb中的对叶子结点权重的惩罚,而我们都知道,对于上面这种 case,树只需要一个节点就可以完美分割9990和10个样本,惩罚项极其之小.这也就是为什么在高维稀疏特征的时候,线性模型会比非线性模型好的原因了:带正则化的线性模型比较不容易对稀疏特征过拟合。此段参考自
- 高维稀释经常出现在one-hot的时候
特征onehot之后,一个特征变成了很多特征,那么它被选中的概率就变大,无形中就增加了这个特征的重要性,等同于降低了其他特征的重要性,这样就不符合实际情况。所以说在这种情况下,onehot编码产生的稀疏特征不适合树算法。