DATE: April 15, 2024


内部结点(internal node)和叶结点(leaf node)

内部结点表示一个特征或属性,叶结点表示一个类。总的来说,决策树是一种树状结构,它的每一个叶节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的取值,将其划分为若干个子集。
 https://zhuanlan.zhihu.com/p/537933555

特征选择

特征A对训练数据集D的信息增益 g ( D , A ) g(D, A) g(D,A),定义为集合D的经验熵 H ( D ) H(D) H(D)与特征A给定条件下D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)之差,即:

g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D, A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

H = − ∑ i = 1 n p ( x i ) log ⁡ 2 p ( x i ) \mathrm{H}=-\sum_{\mathrm{i}=1}^{n} \mathrm{p}\left(x_{i}\right) \log _{2} p\left(x_{i}\right) H=i=1np(xi)log2p(xi)

H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) \mathrm{H}(\mathrm{Y} \mid \mathrm{X})=\sum_{i=1}^{n} p_{i} H\left(Y \mid X=x_{i}\right) H(YX)=i=1npiH(YX=xi)

注意:从根节点开始依次计算,选取后特征 A A A数据集合 D D D将发生改变为去除特征 A A A的剩余集合
详细过程见, https://zhuanlan.zhihu.com/p/537933555

常见的决策树算法有ID3,C4.5、C5.0和CART(classification and regression tree),CART的分类效果一般要优于其他决策树。

ID3算法有四个主要的不足,一是不能处理连续特征,第二个就是用信息增益作为标准容易偏向于取值较多的特征,最后两个是缺失值处理的问和过拟合问题,C4.5算法中改进了上述4个问题。

对于第一个问题,不能处理连续特征, C4.5的思路是将连续的特征离散化。
对于第二个问题,信息增益作为标准容易偏向于取值较多的特征的问题,因此引入信息增益比,特征数越多的特征对应的特征熵越大,它作为分母,可以校正信息增益容易偏向于取值较多的特征的问题。
对于第三个缺失值处理的问题,主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。
对于第一个子问题,对于某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。
对于第二个子问题,可以将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。比如缺失特征A的样本a之前权重为1,特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4.则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9, 4/9。
对于第4个问题,C4.5引入了正则化系数进行初步的剪枝。
 https://www.cnblogs.com/pinard/p/6050306.html

sklearn 中的决策树相关代码是用cython实现的,只提供了.pyi描述文件,无法通过重写方法实现C4.5和C5.0