第四章 决策树
4.1 基本流程
决策树(decision tree)是一类常见的机器学习算法。
例如,我们要对”这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或”子决策”:比如根据它的颜色,根蒂等一些属性进行判断。
一棵决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集。
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
其基本流程如下:
输入:训练集 D = {( x1,y1 x 1 , y 1 ),( x2,y2 x 2 , y 2 ),…,( xn,yn x n , y n )}
属性集 A = { a1,a2,...,a3 a 1 , a 2 , . . . , a 3 }
过程:函数TreeGenerate(D,A)
1:生成结点node;
2:if D D 中样本全属于同一类别C then
3: 将node标记为C类叶结点;return
4:end if
5:if A = OR D D 中样本在A上取值相同 then
6: 将node标记为叶结点,其类别标记为D中样本数最多的类;return
7:end if
8:从A中选择最优划分属性;
9:for a∗ a ∗ 的每一个值 av∗ a ∗ v do
10: 为node生成一个分支;令 Dv D v 表示 D D 中在上取值为 av∗ a ∗ v 的样本子集;
11: if Dv D v 为空 then
12: 将分支结点标记为叶结点,其类别标记为 D D 中赝本最多的类;return
13: else
14: 以TreeGenerate(, A A {})为分支结点
15: end if
16:end for
输出:以node为根结点的一棵决策树
4.2 划分选择
我们希望随着划分过程的不断进行,决策树的分支结点所包含的样本尽可能属于同一类别,即结点的”纯度”(purity)越来越高
4.2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占的比例为 pk(k=1,2,3...,|y|) p k ( k = 1 , 2 , 3... , | y | ) ,则D的信息熵定义为
Ent(D)=−∑k=1|y|pklog2pk E n t ( D ) = − ∑ k = 1 | y | p k l o g 2 p k
Ent(D)的值越小,则D的纯度越高“信息增益”(information gain):
Gain(D,a)=Ent(D)−∑v=1V|Dv||D|Ent(DV) G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V | D v | | D | E n t ( D V )
其中离散属性 a a 有个可能的取值{ a1,a2,...,aV a 1 , a 2 , . . . , a V },若使用 a a 来对样本集进行划分,则会产生 V V 个分支结点,其中第个分支结点包含了 D D 中所有在属性上却只为 av a v 的样本,记为 Dv D v 。
一般而言,信息增益越大,则意味着使用属性 a a 类似进行划分所获得的”纯度提升”越大。因此我们可以用信息增益来进行决策树的属性划分。
4.2.2 增益率
信息增益准则对可却只数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,我们可以使用”增益率”(gain ratio)来进行属性划分:
其中
IV(a)=−∑v=1V|Dv||D|log2|Dv||D| I V ( a ) = − ∑ v = 1 V | D v | | D | l o g 2 | D v | | D |
称为属性a的固有值(intrinsic value),属性a可能取值数目越多(即V越大),则IV(a)的值通常会越大。增益率准则对可取值数目较少的属性有所偏好
4.2.3 基尼指数
数据集D的纯度可用基尼值来度量:
Gini(D)=∑k=1|y|∑k′≠kpkpk′=1−∑k=1|y|p2k G i n i ( D ) = ∑ k = 1 | y | ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 | y | p k 2
Gini(D)越小,则数据集D的纯度越高
属性a的基尼指数定义为
Gini_index(D,a)=∑v=1V|Dv||D|Gini(Dv) G i n i _ i n d e x ( D , a ) = ∑ v = 1 V | D v | | D | G i n i ( D v )
4.3 剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段,决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)
4.4 连续和缺失值
4.4.1 连续值处理
遇到连续值可以采用连续属性离散化技术,最简单的策略就是采用二分法(bi-partition)对连续属性进行处理