决策树(Decision Tree)算法,属于机器学习有监督分类算法的一种,决策树是一个预测模型。决策树是一种用于对实例进行分类的树形结构。由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点与叶结点,内结点表示一个特征或属性的测试条件(用于分开具有不同特性的记录),叶结点表示一个分类。
使用决策树模型,首先构建决策树,然后从决策树的根结点开始,沿着内部结点的属性测试条件选择适当的分支,得到最终的叶结点分类。
输入:训练集D={(x1,y1),(x2,y2),...,(xm,ym)};
属性集A={a1,a2,....,ad}
过程:函数TreeGenerate(D,A)
1:生成结点node
2:if D 中样本全属于同一类别C then
3: 将node标记为C类叶结点; return;(1)
4:end if
5:if A=空 OR D 中样本在 A 上取值相同 then
6: 将node标记为叶结点,其类别标记为D中样本数最多的类; return;(2)
7:end if
8:从A中选择最优划分属性a*;
9:for a* 的每一个值 a*v do
10: 为node生成一个分支; 令Dv表示D中在a*上取值为a*v的样本子集;
11: if Dv 为空 then
12: 将分支结点标记为叶结点,其类别标记为D中样本最多的类; return;(3)
13: else
14: 以TreeGenerate(Dv,A\{a*})为分支结点
15: end if
16:end for
在决策树基本算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(3)当前结点包含的样本集合为空,不能划分;
在第(2)中情形下,把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第(3)中情形下,同样将当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别;注意这两种情形处理的实质不同:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先验分布。
Hunt算法是一种采用局部最优策略构建决策树的算法,通过将训练记录相继划分为较纯的子集以递归的方式建立决策树。假设是与结点 t 相关联的训练记录集,是类标号,递归过程如下:
(1)若中所有记录都属于同一类,则 t 是叶结点,使用来标记。
(2)若中包含属于多个类的记录,则选择一个属性测试条件,将记录划分为较小的子集,对测试条件的每个输出,创建一个子女结点,并根据测试结果将记录分布到子女结点中,对于每个子女结点,递归调用该算法。
决策树学习的关键一步是选择最优划分属性。一般而言,随着划分过程不断进行。决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。
1、基尼系数(Gini)
对于一个给定的结点 t ,基尼系数的计算公式为
选择最佳划分的度量通常是根据划分后子女结点的不纯性的程度,不纯的程度越低,类分布就越倾斜。基尼系数越小,则数据集D的纯度越高。
通过比较父结点与子女结点的不纯程度来计算测试条件的效果,两者差值越大,测试条件的效果越好。
,其中是给定结点的不纯度度量,N 是父结点上的记录总数,k 是属性值的个数,是与子女结点相关联的记录个数,决策树构建算法通常选择最大化增益的测试条件。
2、信息熵(Entropy)
香农提出“信息熵”的概念,一条信息的信息量大小和它的不确定性有直接关系,对一样东西越是一无所知,想要了解它就需要越多的信息。
对于给定的结点 t ,信息熵公式为:
,其中表示给定结点 t 中属于类 j 的记录所占比例。信息熵的值越小,则D的纯度越高。
信息增益(Information gain),ID3决策树学习算法以信息增益为准则来选择划分属性。
,其中 p 为父结点,p 被划分为 k 类,是划分为第 i 类的记录的数量。信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。
信息增益的缺点是信息增益大小是相对训练集而言的,训练数据集的经验熵比较大时,信息增益会偏大。
增益率(Information gain ratio),C4.5决策树学习算法以增益率为准则划分属性。
信息增益准则对可取值数目较多的属性有所偏好,增益率准则对可取值数目较少的属性有所偏好,C4.5算法并不直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
3、分类误差(classfication error)
给定一个结点 t ,分类误差的定义为.
剪枝是决策树学习算法中对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学的“太好”了,以致于把训练集自身的一些特点当作所有数据具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险。
决策树的剪枝的基本策略有“预剪枝”和“后剪枝”。预剪枝是指在决策树生成过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点。
参考:
【1】https://blog.csdn.net/baimafujinji/article/details/51724371
【2】机器学习,周志华