决策树的原理很简单:一颗由多个判断节点组成的树。因为其应用之广,也有许许多多的衍生(Random Forest, GBDT,XGBOOST)。我想确实很有必要做一个总结。
决策树的一些优点是:
- 简单理解和解释。树可以被可视化。
- 需要很少的数据准备。其他技术通常需要数据标准化,需要创建虚拟变量,并删除空白值。但请注意,该模块不支持缺少的值。
- 使用树(即,预测数据)的成本是用于训练树的数据点的数量的对数。
- 能够处理数字和分类数据。其他技术通常专门用于分析只有一种变量的数据集。查看更多信息的算法。
- 能够处理多输出问题。
- 使用白盒模型。如果一个给定的情况在模型中是可观察的,那么这个条件的解释就很容易用布尔逻辑来解释。相比之下,在黑箱模型(例如,在人造神经网络中),结果可能更难以解释。
- 可以使用统计测试来验证模型。这可以说明模型的可靠性。
- 即使其假设受到数据生成的真实模型的某种程度的违反,也可以很好地执行。
决策树的缺点包括:
- 决策树学习者可以创建过于复杂的树,不能很好地概括数据。这被称为过度拟合。修剪(目前不支持)等机制,设置叶节点所需的最小样本数或设置树的最大深度是避免此问题所必需的。
- 决策树可能不稳定,因为数据中的小的变化可能会导致生成完全不同的树。通过在集合中使用决策树可以缓解这个问题。
- 学习最优决策树的问题在最优化的几个方面甚至简单的概念上都被认为是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如在每个节点处进行局部最优决策的贪婪算法。这样的算法不能保证返回全局最优的决策树。这可以通过在集合学习器中训练多个树来减轻,其中特征和样本随机地被替换。
- 有些概念很难学,因为决策树不能很容易地表达它们,比如XOR,奇偶校验或多路复用器问题。
- 决策树学习者如果某些类占主导地位,就会创建偏向性树。因此建议在拟合决策树之前平衡数据集。
分类树:
分类决策树的核心思想就是在一个数据集中找到一个最优特征,然后从这个特征的选值中找一个最优候选值,根据这个最优候选值将数据集分为两个子数据集,然后递归上述操作,直到满足指定条件为止。
主要讲讲C4.5算法(用信息增益率)有一个很好的例子:
1. 计算类别信息熵
2. 计算每个属性的信息熵
每个属性的信息熵相当于一种条件熵。他表示的是在某种属性的条件下,各种类别出现的不确定性之和。属性的信息熵越大,表示这个属性中拥有的样本类别越不“纯”。
3. 计算信息增益
信息增益的 = 熵 - 条件熵,在这里就是 类别信息熵 - 属性信息熵,它表示的是信息不确定性减少的程度。如果一个属性的信息增益越大,就表示用这个属性进行样本划分可以更好的减少划分后样本的不确定性,当然,选择该属性就可以更快更好地完成我们的分类目标。
信息增益就是ID3算法的特征选择指标。
4.计算属性分裂信息度量
用分裂信息度量来考虑某种属性进行分裂时分支的数量信息和尺寸信息,我们把这些信息称为属性的内在信息(instrisic information)。信息增益率用信息增益 / 内在信息,会导致属性的重要性随着内在信息的增大而减小(也就是说,如果这个属性本身不确定性就很大,那我就越不倾向于选取它),这样算是对单纯用信息增益有所补偿。
5. 计算信息增益率
(下面写错了。。应该是IGR = Gain / H )
C4.5的算法流程: