目录
1. 构造决策树的依据
决策树的构造,从本质上讲就是每次将样本分成几组,目标是让每一组中的类别尽可能单一(每组的熵加权相加后的值尽可能的小)
ID3中使用最大化信息增益度对样本进行分组,C4.5中使用最大化信息增益率对样本进行分组,CART中使用最小化分组后基尼系数进行分组;
1.1 信息增益度
信息增益度从字面上理解就是信息量变多的量,信息变多自然系统的混乱程度就会变小,因此信息增益度也就等价于节点分组前后信息熵差值
通过某个特征a对样本进行划分后得到的信息增益度为:
其中:
- V表示a特征下所有取值的数目,Dv/D表示a特征取v值的概率
- Ent(D)表示整个样本的信息熵,Ent(Dv)表示根据特征a分组后每组关于类别的信息熵
- 后边这一项计算的是根据特征a的取值进行划分后每组信息增益的加权和,权重是每组样本数占总样本数的比例
- 第二个公式中,|y|表示类别数,pi表示所有样本中i类样本的比例
1.2 信息增益率
信息增益率在信息增益度的基础上除了一个值,这个值表示a特征下不同取值的信息熵,公式如下:
其中:
- |Di|/D表示在样本数据D中,a特征取值第i种值的比例
注意,表示样本D中a特征所有取值的信息熵,Ent(D)表示D样本中类别的信息熵,虽然都是信息熵,但是统计的对象不同,a特征下的取值越多,就会越大,因此信息增益率和成反比,当a特征下的取值越多,信息增益率就会越少
在特征选择时,使用信息增益度会倾向于选择取值较多的特征,使用信息增益率会倾向于选择取值较小的特征,在C4.5中为了在两种算法中找到一个平衡,实际是先得到信息增益度大于某个阈值的特征集合,然后在这些特征中选择信息增益率最大的特征作为最终进行分裂的特征
1.3 基尼系数
通常意义上的基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率,公式如下:
其实,根据上述公式可以知:基尼系数表示从样本中有放回的抽取两个样本,类别不同的概率
从样本中有放回的抽取两个样本,类别不同的概率根据第一次抽到的样本的不同类别可以看作是K(K=类别数)种情况概率的和
以任意一个类别A为例,第一次抽中A类样本,第二次抽中非A类样本的概率(有放回)为 ,那么K种情况的概率和你可以表示为基尼系数的公式了
决策树中的基尼系数可以表示为:
其中,
- 和表示根据a特征分组后,每一组样本占总样本的比例
- 和表示通过a特征分组后,第1、2组中属于k类样本的比例
- 因为在使用基尼系数的CART决策树中,树的类型只能是二叉树,因此这里每次只分两组
基尼系数和信息增益、信息增益率不同,基尼系数越小越好,其实基尼系数和信息熵的评价效果类似;
2. ID3 vs C4.5 vs CART
ID3 vs C4.5 vs CART三种算法的比较如下图所示:
算法 | 支持任务 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 | 特征多次被划分 |
---|---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益度 | 否 | 否 | 否 | 否 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 是 | 是 | 是 | 否 |
CART | 分类回归 | 二叉树 | 基尼系数+MSE | 是 | 是 | 是 | 是 |
3. 缺失值处理
请参考以下链接:
4. 剪枝操作
剪枝的目的是构造一个高度最矮的决策树,防止模型的过拟合,C4.5和CART能够进行剪枝操作
4.1 预剪枝
预剪枝指在构建决策树的同时进行剪枝操作,预剪枝有以下几种方式:
- 提前设定决策树的最大深度和每个节点的最少样本数目,当决策树达到上述条件时提前停止构建
- 留出法:将数据集划分为训练集和测试集,当分裂节点时,使用k折交叉验证计算分裂前后在测试集上的准确率(泛化性能),若准确率提高则分裂,否则此节点不在分裂
预剪枝相比于后剪枝,虽然计算量小,但容易出现欠拟合
4.2 后剪枝
后剪枝指在决策树构建完成后进行剪枝操作,后剪枝有一下几种方式:
- 通过比较前后损失函数是否降低,若降低则进行剪枝操作,否则不进行剪枝
- 留出法:将数据集划分为训练集和测试集,当分裂节点时,使用k折交叉验证计算分裂前后在测试集上的准确率(泛化性能),若准确率提高则分裂,否则此节点不在分裂
决策树损失函数如下:
损失函数是两项的线性组合,其中:
- 第一项是所有叶子节点信息熵(对象是类别)的加权和,权重是每个叶子节点的样本数量,这一项用来降低每个叶子节点的熵值
- 第二项是决策树中叶子节点的数量,用来降低网络的复杂程度
5. 关于 ID3、C4.5、CART 的几个问题
1. C4.5、CART 处理连续值属性
ID3原则上不能对连续值进行处理,因为连续值的特征往往还有很多取值,如果使用ID对连续值进行分裂,那么会产生众多分支,这显然不是高效的;如果使用C4.5和CART的划分方式,每次将连续值划分为两部分,这显然违背了ID3每个特征只能划分一次的规则,当然通过简单的改进ID3也是能够处理连续特征的
对于连续值的属性,我们一般进行如下处理:
- 将连续特征的取值按升序排列
- 根据取值确定N个分割点(取相邻两个取值的均值作为分割点),计算每个分割点修正后的信息增益,(修正的方法是在信息增益的基础上-log2(N-1)/|D|,N是连续特征的取值个数,D是训练数据数目)
- 选取修正信息增益最大的分割点计算信息增益率,并将其作为此特征的信息增益率
注:修正的信息增益是连续特征和离散特征处理时最大的区别;使用修正的信息增益,原因在于:当离散属性和连续属性并存时,C4.5算法倾向于选择连续特征做最佳树分裂点,修正后的信息增益能够在一定程度上避免此问题
2. C4.5、CART 解决回归问题
回归和分类问题本质上就是预测标签的区别,分类的标签是离散值,回归的标签是连续值
对于连续值我们无法将同标签的样本划分到一起,因为每个样本的标签值都是不同的;但是连续值不同取值之间可以比较大小,因此对于回归问题,我们更希望在分裂时将标签数值接近的样本划分到一起(分类是最小化每组标签值的种类,回归是最小化每组标签取值的范围);在回归问题中,我们使用均方根误差代替信息增益来作为节点分裂的依据,这是决策树在解决分类问题和回归问题时最主要的区别
在决策树中,计算连续值特征的信息增益和解决回归问题是两类不同的问题,虽然都是对连续值的处理但是对象不同:连续值的特征是指样本的某一个特征的值是连续的;回归问题是指样本的标签是连续值
3. 对于ID3模型,每次分组是时根节点的信息熵是定值,为什么不直接用分组后的信息熵作损失函数?
具体的有原因还没有弄明白,还请大神解惑,个人推测了两种原因
1. 如果对于每一个根节点进行分组时,分组前的信息熵(信息增益中的第一项)确实是不变的,但是要在多个根节点中选择一个进行分裂,每个根节点的信息熵就不同了,此时就需要计算信息增益
2. 为了在C4.5中计算信息增益率,因此先计算信息增益度,方便后边的计算
4. 为什么CART中不需要计算基尼系数的前后差值
ID3、C4.5 的多分支树结构,在使用信息增益选择分裂特征时会想倾向选择那些取值较多的特征(这种特征往往不是最优特征)因此在C4.5中使用信息增益率来避免算法对多取值特征的倾向,而计算信息增益率就需要用到信息增益的差值;
但是在CART决策树中使用的是二叉树,因此选择了取值较多的特征也不会使网络的性能变差,因此就不需要信息增益率来限制特征选择,因此不需要计算基尼系数前后的差值