决策树(ID3,C4.5,CART)
训练阶段:从给定的训练数据集DB,构造一棵决策树
分类阶段:从根开始,按照决策树的分类属性往下划分,直到叶节点,获得概念(决策、分类)结果
特征选择
- 从定量的角度,信息增益与信息增益比就是表示特征“有效性”的指标。
- 信息熵是度量样本集合纯度最常用的一种指标。熵越大,不确定性越大;熵越小,不确定性越小。
- 对于分类前的数据,因为没有其类别的任何信息,此时的数据不定性最大,对于决策树分类后的数据,数据的随机不确定性得到了最大程度的消除。所以在特征选择时,会选择使熵降低最多的特征。
信息熵
- 信息熵:对于一个离散的随机变量X,其概率分布P与熵H的定义为:
,
- log一般取以2为底或者是e为底的对数。熵是一个恒为非负的值。
- P越大->H越小;P越小->H越大
- 条件熵:若有另一随机变量Y,H(Y|X)则表示在已知随机变量X的条件下随机变量Y的不确定程度
PS:熵和条件熵用样本数据矩估计计算的,称为经验熵和条件经验熵
信息增益
- 某一特征A对数据集D的信息增益g(D,A)定义为:g(D,A)=H(D)-H(D|A),其中的熵均为经验熵。
- 信息增益可以视作某一特征对数据集混乱程度降低贡献程度:即当某个特征确定下来,数据集熵的降低得越明显,说明该特征对数据集提供了更多的信息,贡献度越大。
信息增益比
决策树的生成
参考:https://zhuanlan.zhihu.com/p/85731206
ID3:信息增益
核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间。步骤为:
- 初始化特征集合和数据集合;
- 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
- 更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
- 重复2,3两步,若子集值包含单一特征,则为分支叶子节点。
缺点:
- ID3没有剪枝策略,容易过拟合;
- 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于1;
- 只能用于处理离散分布的特征;
- 没有考虑缺失值。
C4.5:信息增益率
C4.5针对ID3的四点问题,分别采取了不同方法进行克服。
- 引入悲观剪枝策略进行后剪枝;
- 引入信息增益率作为划分标准;
- 将连续特征离散化,假设n个样本的连续特征A有m个取值,C4.5将其排序并取相邻两样本值的平均数共m-1个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
- 对于缺失值的处理可以分为两个子问题:
- 问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
- 问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个节点里)
- 针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
- 针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此 C4.5 并不是直接用增益率最大的特征进行划分,而是使用一个启发式方法:先从候选划分特征中找到信息增益高于平均值的特征,再从中选择增益率最高的。
缺点:
- 剪枝策略可以再优化;
- C4.5 用的是多叉树,用二叉树效率更高;
- C4.5 只能用于分类;
- C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
- C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
CART:Gini系数
CART 包含的基本过程有分裂,剪枝和树选择。
- 分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
- 剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
- 树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。
基尼指数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。
CART 在 C4.5 的基础上进行了很多提升。
- C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
- C4.5 只能分类,CART 既可以分类也可以回归;
- CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
- CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
- CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。
决策树的修剪
C4.5--悲观剪枝方法
- 用递归的方式从下往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。
- 后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。
CART--代价复杂度剪枝
损失函数:
- T表示确定的一棵决策树,该树共有|T|个叶子结点,每个结点下包含训练样本Nt个,Ht(T)表示训练样本Nt的经验熵。
- 损失函数包括两部分:决策树分类结果的熵与决策树的叶子结点的数量。
- 极小化损失函数时,既需要使得决策树分类后的数据熵很小,同时也需要满足决策树的叶子结点不能太多,即决策树不能太大。其中系数α表示对两者的平衡(决定此时对叶子结点的要求是否很苛刻),α越大,就越倾向于牺牲一定模型准确率以减少树的叶子结点数量,否则相反。
剪枝的具体步骤:
- 计算每个结点的经验熵;
- 计算损失函数,记当前树的某个叶子结点剪掉前后的树的损失函数,记为Cα(T前)与Cα(T后),若Cα(T前)≥Cα(T后),则剪掉该叶子结点,其父结点成为新的叶子结点,得到一棵新的决策树;
- 对决策树的叶子结点重复2的过程,直到不能再剪枝为止。
越努力越幸运!