--------韦访 20181030
1、概述
这一讲,我们来看看决策树。
2、概念
决策树(decision tree)是一种常用的分类与回归方法,其模型为树状结构,如下图所示,
其中,最顶部的圆点为根节点,其他圆点为内部节点,方形为叶子节点。
决策树一般分为三步:特征选择、生成决策树、修剪决策树。下面分别说明。
3、特征选择
特征选择的主要目的是选择对训练数据集具有最大的分类能力的特征,以提高决策树的学习效率,降低复杂度。
熵(entropy):
怎么判断特征选择的分类能力呢?总得有个衡量标准吧?这个标准就是---熵
熵是表示随机变量不确定性的度量。公式为:
图形如下图所示,
由上图可知,当P=0或者P=1时,H(X)=0,熵值为0,即事件为确定事件。
当P=0.5时,H(X)=1,熵值为1,此时随机变量的不确定性最大。
举个简单的例子,有下面两个集合,
A集合:[1, 1, 1, 1, 1, 1, 1, 1, 2, 2]
B集合:[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
A集合比B集合相对稳定,所以熵也比B集合低。不确定性越大,熵值也就越大。
信息增益(information gain):
信息增益表示特征X使得类Y的不确定性减少的程度,信息增益越大的特征,表示其具有更强的分类能力。公式为,
下面会举个例子说明这个式子怎么用的。
4、生成决策树
为了方便讲解,举个例子说明,给出如下图所示的14天的打球的数据,4种环境变化(outlook、temperature、humidity、windy)作为特征,生成决策树。
按上面的数据,我们列出四种可能的划分方式,如下图所示,
那么,应该选谁当根节点呢?上面说到,谁的信息增益越大,谁的分类能力就越强,就该选谁作为节点。那么,现在就分别计算它们的信息增益。
14天中,有9天打球,5天不打球,那么,熵为,
对于Outlook特征:
Outlook=sunny时,熵值为,
Outlook=overcast时,全都是yes,则熵值为0.
Outlook=rainy时,熵值为,
上面的根据数据表可得,Outlook分别为sunny、overcast、rainy的概率为5/14、4/14、5/14。则熵值为,
则Outlook的信息增益为,
对于Temperature特征:
Temperature=hot时,熵值为,
Temperature=mild时,熵值为,
Temperature=cool时,熵值为,
上面的根据数据表可得,Temperature分别为hot、mild、cool的概率为4/14、6/14、4/14。则熵值为,
则Outlook的信息增益为,
湿度和风就不算了,以此类推即可。
上面的算法成为ID3算法,ID3算法根据信增益评估和选择特征。
但ID3算法有个缺陷,比如,在上面的数据中,新增一个ID属性,每一行的ID数据分别为1到14,那这个ID的熵为0,信息增益是最大的,但是显然这个ID对我们最终的结果是没有任何影响的,所以就有了根据信息增益率来选择特征的C4.5算法。
信息增益率的公式如下:
说白了,信息增益率就是信息增益除以自身熵。
CART决策树:
CART决策树使用基尼指数(Gini index)来选择划分属性。公式如下,
Gini系数用来衡量数据集的纯度,反应了从数据集中随机抽取两个样本,其标记列别不一致的概率,Gini系数越小,则数据集纯度越高。它和熵的衡量标准类似,只是计算方式不同而已。
5、剪枝(prunning)
剪枝是为了防止决策树算法过拟合的主要手段,通过去掉一些分支来降低过拟合的风险。
剪枝是指将一颗子树的子节点去掉,根节点作为叶子节点,如下图,
剪枝策略一般分两种:预剪枝、后剪枝。
预剪枝是边建立决策树边进行剪枝操作。后剪枝是建立完决策树后,再进行剪枝操作。
预剪枝有欠拟合的风险,后剪枝可以得到泛化能力更强的决策树,但开销会更大。
预剪枝算法:
预剪枝策略一般为:限制深度、叶子节点个数、叶子节点样本数、信息增益量等。
限制深度比较好理解,如下图所示,如果限制深度为3,那么,第3层以下的节点都去除即可。
限制叶子节点个数如下图,如果要叶子节点为3,则当叶子节点为3时,就不继续建立节点了。
后剪枝算法:
后剪枝的方法常见的有两种,Reduced-Error Pruning(REP,错误率降低剪枝)、Pessimistic Error Pruning(PEP,悲观剪枝),下面分别介绍。
错误率降低剪枝:
这个算法的思路是,再用一个测试数据集来纠正完全决策树。对于完全决策树的每一个非叶子节点的子树,尝试把它替换成一个叶子节点,该叶子节点的类别,用子树所覆盖训练样本中存在最多的那个类来代替。这就得到了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果优于原来的决策树,则保留修改。自下而上的遍历所有子树,直至没有任何子树需要替换。
悲观剪枝:
该算法是用过极小化损失函数实现的,设树T的叶节点个数为|T|,t是树T的叶节点,该叶节点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2...K, H(T)为叶节点t的熵,α≥0为参数,则损失函数定义为,
将上式简记为,
其中,C(T)表示决策树与训练数据的拟合度,|T|表示决策树的复杂度,α控制两者之间的影响。α越大,决策树越简单,α越小,决策树越复杂。
假设输入输出如下:
输入:完全树T,参数α
输出:修剪后的子树Tα
则剪枝的方法如下,
(1)、计算每个节点的熵
(2)、递归的从树的叶节点向上回缩。
假设一组叶节点回缩前后的树分别为TB和TA,则其对应的损失函数值分别为Cα(TB)和Cα(TA),如果Cα(TA)≤Cα(TB),则剪枝,将子树的根节点变成新的叶节点。
(3)、重复第(2)步,直到不能继续为止。
示意图如下,
注:以上图参考自李航的《统计学习方法》
如果您感觉本篇博客对您有帮助,请打开支付宝,领个红包支持一下,祝您扫到99元,谢谢~~