前言:决策树是一种基本的分类与回归的方法,按照统计学习方法的三个基本要素——模型,策略,算法的方式,我们来进行学习。
1. 决策树模型
决策树定义:分类决策树是一种描述对象分类的树形结构。树中的节点为了两类:内部节点和叶节点,内部节点表示了一个特征,叶节点表示了最后输出的类标志。有趣的是,与其他分类模型算法不同的是,决策树既不是寻找超平面对其进行逼近,也不是使用先验后验概率对其进行预测,决策树在分类的过程中所使用的是最大化样本子集特征纯度的策略进行分类,这样就不需要任何领域知识/参数设定。当然决策树模型也会有欠拟合或过拟合的担忧,那么我们其实在决策树模型中就将关注点放在了以下几点:
- 策略:最优化目标函数/目标值是什么?
- 策略:如何避免过拟合?
- 算法:我们依据最优化目标采取的算法是什么?
- 算法:我们如何生成一个决策树,并防止其过拟合?
形象化理解决策树:
举一个例子我们来看一下到底什么是决策树生成过程(摘自其他博客):
母亲:给你介绍个对象。
女儿:年纪多大了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这就是一个女生在决定去或者不去的一个2分类决策树的生成过程,我们将其可视化为一个树结构,可以看到:
在其中我们可以清晰的看到,绿色的节点是内部节点,代表了一个决策依据。橙色的节点是叶节点,代表了决策结果。箭头表示了决策依据的判断路径。那么这个模型就可以在加入具体量化的判断依据之后就可以为一个决策树了。
- 决策树的学习:
依据决策树定义中我们的关注点,我们确认了决策树的学习算法应该包括了内部节点的特征选择,决策树的生成,防止过拟合的剪枝过程。如此,我们就有了一个决策树的基本算法
输入:训练集D={(x1,y1),(x2,y2),...,(xm,ym)}
属性集A={a1,a2,...,ad}
过程:函数GenerateTree(D,A)
1: 生成节点node;
2: if D中样本全是一个类别C then
3: 将node节点标记为C类叶节点;return;
4: end if
5:if A = null or D中样本在A上取值相同 then
6: 将node标记为叶节点,按照少数服从多数原则标记为D类中样本数最多的类 ;return
7: end if
8: 从A中按照策略选择最优的划分属性a*;
9:for a* 的每一个可能取值a*v then
10: 为node生成一个分支;令Dv表示D中在属性a*上取值为a*v的样本子集;
11: if Dv为空集 then
12: 将node的分支节点标记为叶节点,其类别标记为D中样本最多的类;return
13: else
14: 以GenerateTree(Dv,A\{a*})为分支节点
15: end if
16:end for
输出 以node为根节点的一颗决策树
有上面的基本算法过程,我们可以发现:
1. 决策树生成过程是一个递归的过程
2. 在递归过程中会导致递归返回的情形有三种:
- 2.1 当前节点包含的样本子集都是同一类,无需划分,直接以当前类作为叶节点的决策结果
- 2.2 当前节点属性级为空集,或所有样本在所有属性上都取值相同,无法划分,直接按照少数服从多数来作为当前叶节点的决策结果,这是利用当前节点的后验分布
- 2.3 当前节点的样本子集为空集,无法划分,只能以其父节点中的样本子集中的样本最多类来表示。把父节点的样本分布当作当前节点的先验分布
3.伪代码第8行就是我们关注点1和3的解答过程,详见下:
2. 特征选择:
特征选择问题,希望在对一个节点选取最有属性来最为这个节点的标志,这样的过程其实质就是一个条件选取的过程,在属性ai的条件下,再选取aj,使得特征选择最优目标可以最大,但是有一点值得确定:特征有离散和连续两种特性,针对这两种不同特征,我们采取什么样的选择呢?这个是我们后面需要确定的,现在我们还是回到特征选择的最有函数/值上来
(不好意思,这个是我的逻辑思路,有了这样的疑问,将其当作次要任务先记录后解决,先关注当前重点)
2.1 熵(entropy)
- 定义:度量样本集合纯度
- 公式:
Ent(D)=−∑i=1|y|pklog2pk E n t ( D ) = − ∑ i = 1 | y | p k l o g 2 p k
Ent(D)的值越小,则D的纯度越高,同时在 p1=p2=p3=...=pd=1d p 1 = p 2 = p 3 = . . . = p d = 1 d 时,取到熵最小值
2.2 信息增益(information gain):
- 定义:信息增益表示得知特征信息而使得类的信息不确定性减少的程度,那么根据这个描述,我们如果使用信息增益作为决策树最优选择的依据,那么就要选取使得类信息不确定性减少最多的,也就是信息增益最大的特征。
- 公式:
假定离散属性a有V个可能取值 a1,a2,...,aV a 1 , a 2 , . . . , a V ,如果使用a对样本集来进行划分,则会产生V个分支,每一个分支i都对应了样本集在属性a上取 ai a i 值的样本集 Di D i 我们就可以根据信息熵的公式来计算信息增益了,但是同时因为不同样本集数量不一样,我们就需要进行加权,权值为 |Di||D| | D i | | D | ,所以有
Gain(D,a)=Ent(D)−∑i=1V|Di||D|Ent(Di) G a i n ( D , a ) = E n t ( D ) − ∑ i = 1 V | D i | | D | E n t ( D i )
表示父节点的信息熵和以a属性进行分支之后各分支信息熵加权和之间的差值,数值上,父节点信息熵为负数,个分支节点的加权和表明了分支之后的信息纯度效果,是肯定比父节点信息熵更小的负数,那么相减就可以得到分支之后的纯度提升效果,结果越大则纯度提升效果越大。所以:
- 信息增益越大,该属性分类越好
- 决策树中最常用的算法ID3就是使用信息增益来最为特征最优选择依据的决策树生成算法
2.3 信息增益比(information gain ratio,又称增益率):
在对信息增益分析我们发现, Gain(D,a) G a i n ( D , a ) 的计算不仅仅受每一个父节点,分支节点的信息熵影响,同时也会受到分支个数V的影响。或者我们可以这样理解,如果我们将属性a的取值分的足够细,那么它的信息增益就会很大,这样就会形成一个所谓的:
**信息增益准则对可取值数目较多的属性有所偏好。
取一个极端的例子,当我们如果把样本集中的编号也作为一个属性的时候,那么决策树生成的只会是一个深度为2,一个根节点,m个叶节点的树结构,但是这样的结构具有非常大的过拟合特性,根本不是我们想要。所以我们为了避免这种偏好,定义了 信息率
- 定义: