决策树
决策树是什么?
它是一种监督学习算法,主要用于分类问题,适合用于可分类的,连续的输入和输出变量。
决策树是这样的一种树,这棵树的每个分支节点表示多个可以选择的选项,并且每个叶节点表示最终所做的决策。
决策树的特质之一:他们需要的数据准备工作非常少,特别是完全不需要进行特征缩放和集中。决策树本质就是一颗由多个判断节点组成的树!
决策树的生成
一. 熵
物理学上,熵(Entropy)是混乱程度的量度。系统越有序,熵值越低;系统越混乱或者分散,熵值越高。
信息理论
1.当系统的有序状态一致时,数据越集中的地方熵值越小,数据越分散的地方熵值越大,这是从信息的完整性上进行描述的。
2.当数据量一致时,系统越有序,熵值越低;系统越混乱或者分散,熵值越高。这是冲信息的有序性上进行的描述。
信息增益及增益率
信息增益:某特征划分数据集前后的熵的差值,熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
信息增益 = entroy(前)- entroy(后)
基尼值和基尼指数
基尼值Gini(D):从数据集D中随机抽取两个样本,起类别标记不一致的概率,Gini(D)值越小,数据集D的纯度越高。
基尼指数Gini_index:选择使划分后基尼系数最小的属性作为最优化分属性
Scikit-Learn使用的分类与回归树(Classification And Regression Tree,简称CART)
CART是一种贪婪算法:从顶层开始搜索最优分裂,然后每层重复这个过程。几层分裂之后,它并不会检视这个分裂的不纯度是否为可能的最低值。贪婪算法通常会产生一个相当不错的解,但是不能保证是最优解。寻找最优树是一个已知的NP完全问题,需要的时间是O(exp(m)),所以即使是很小的训练集,也相当棘手,这就是为什么我们必须接受这个“相当不错”的解。如果P≠NP,那么对于任何NP问题,将不存在多项式算法(可能量子计算机除外)。
到底应该使用基尼不纯度还是信息熵呢?
大多数情况下,它们并没有什么大的不同,产生的树都很相似。基尼不纯度的计算速度略微快一些,所以它是个不错的默认选择。它们的不同在于,基尼不纯度倾向于从树枝中分裂出最常见的类别,而信息熵则倾向于生产更平衡的树。
决策树的剪枝
随着树的增长,在训练样集上的精度是单调上升的,然后在独立的测试样例上测出的精度先上升后下降。
决策树极少对训练数据做出假设(比如线性模型就正好相反,它显然假设数据是线性的)。如果不加以限制,树的结构将跟随训练集变化,严密拟合,并且很可能过度拟合。这种模型通常被称为非参数模型,这不是说它不包含任何参数(事实上它通常有很多参数),而是指在训练之前没有确定参数的数量,导致模型结构自由而紧密地贴近数据。相应的参数模型,比如线性模型,则有预先设定好的一部分参数,因此其自由度受限,从而降低了过度拟合的风险(但是增加了拟合不足的风险)。
常见剪枝方法
1.1 预剪枝
(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。随着树的增长, 在训练样集上的精度是单调上升的, 然而在独立的测试样例上测出的精度先上升后下降。
1.2 后剪枝
后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。
主要有四种:
(1)REP-错误率降低剪枝
(2)PEP-悲观剪枝
(3)CCP-代价复杂度剪枝
(4)MEP-最小错误剪枝
如你所见,决策树是非常直观的,它们的决策也很容易解释,这类模型通常被称为白盒模型。与之相反的,随机森林或是神经网络被认为是一种黑盒模型。它们能做出很棒的预测,你也可以轻松检查它们在做出预测时执行的计算,然而,通常很难解释清楚它们为什么做出这样的预测。比如,如果神经网络说某个人出现在一张图片上,很难知道它实际上是基于什么做出的该预测:是模型识别出来了这个人的眼睛?嘴巴?还是鞋子?甚至是她坐的沙发?相反,决策树提供了简单好用的分类规则,需要的话,你甚至可以手动应用这些规则(例如,花的分类).