第4章 决策树
4.1 基本流程
决策树(Decision Tree)是一类常见的机器学习方法,可通过方法对样本进行分类与回归任务。以二分类任务为例,决策树是基于数结构进行决策的。
决策树学习的目的是为了得到一棵泛化能力强,即处理未见示例能力强的决策树,决策树学习的算法流程如下图所示:
决策树的生成是一个递归过程,在决策树的基本算法中,有以下三种情形会导致递归返回:
- 当前节点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
- 当前结点包含的样本集合为空,不能划分。
决策树算法的核心是对样本属性进行划分,使得决策树的分支结点所包含的样本尽可能属于同一类别,即样本的“纯度”(purity)越来越高。
决策树算法通常有三个步骤:特征的选择、决策树的生成、决策树的修剪(对付过拟合问题)。
常见的决策树算法如下图所示:
建立线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,线性模型如下:
f ( x ) = ω 1 x 1 + ω 2 x 2 + ⋯ + ω d x d + b = ω T x + b (3.1) \begin{aligned} f(\bm{x}) &= \omega_{1}x_{1} + \omega_{2}x_{2}+ \cdots +\omega_{d}x_{d} + b\\ &=\bm{\omega}^{\rm{T}}\bm{x}+b \end{aligned} \tag{3.1} f(x)=ω1x1+ω2x2+⋯+ωdxd+b=ωTx+b(3.1)
其中 x = ( x 1 ; x 2 ; ⋯ ; x d ) \bm{x}=(x_{1};x_{2};\cdots;x_{d}) x=(x1;x2;⋯;xd), x i x_{i} xi是样本 x \bm{x} x在第 i i i个属性上的取值, ω = ( ω 1 ; ω 2 ; ⋯ ; ω d ) \bm{\omega}=(\omega_{1};\omega_{2};\cdots;\omega_{d}) ω=(ω1;ω2;⋯;ωd) 为权重值, b b b为偏置项,偏置项 b b b增加了模型的自由度。通过上述线性模型,可以通过一些策略和算法来拟合一些数据。
4.2 划分选择
4.2.1 信息增益
信息熵(information entropy)是度量样本集合纯度常用的一种指标,信息熵的大小反映随机变量的不确定性程度(也反映随机变量所包含信息的多少),信息熵越小,随机变量的不确定性程度就越小,样本集合的纯度就越高。假定样本集合 D D D中第 k k k类样本所占的比例为 p k ( k = 1 , 2 , … , ∣ y ∣ ) p_{k}(k=1,2,\dots, \vert{y}\vert) pk(k=1,2,…,∣y∣),则 D D D的信息熵定义如下:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ ) p k l o g 2 p k (4.1) \begin{aligned} Ent(D)=-\sum\limits_{k=1}^{\vert{y}\vert)}p_{k}\rm{log}_{2}\it{p_{k}} \end{aligned} \tag{4.1} Ent(D)=−k=1∑∣y∣)pklog2pk(4.1)
信息增益:表示已知一个随机变量的信息后,使得另一个随机变量的不确定性减少的程度。一般而言,信息增益越大,表示一个随机变量使得另一个随机变量的不确定性减少的程度越大,也就意味着样本的纯度越高。
离散属性 a a a有 V V V个可能的取值 { a 1 , a 2 , … , a V } \{a^{1},a^{2},\dots,a^{V}\} {a1,a2,…,aV}, D v D^{v} Dv表示第 v v v个分支结点包含了 D D D中所有在属性 a a a上取值为 a v a^{v} av的样本,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ \vert D^{v} \vert/\vert D \vert ∣Dv∣/∣D∣,即样本数越多的分支结点的影响越大,属性 a a a对样本集 D D D进行划分所获得的“信息增益”如下:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 ∣ V ∣ ∣ D v ∣ ∣ D ∣ E n t ( D v ) (4.2) \begin{aligned} Gain(D,a)=Ent(D)-\sum\limits_{v=1}^{\vert{V}\vert}\frac{\vert{D^{v}}\vert}{\vert{D}\vert}{Ent(D^{v})} \end{aligned} \tag{4.2} Gain(D,a)=Ent(D)−v=1∑∣V∣∣D∣∣Dv∣Ent(Dv)(4.2)
增益率
增益率可以减少算法对于取值数目较多的偏好带来的不利影响,增益率定义为:
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) (4.3) \begin{aligned} Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} \end{aligned} \tag{4.3} Gain_ratio(D,a)=IV(a)Gain(D,a)(4.3)
I V ( a ) = − ∑ v = 1 ∣ V ∣ ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ (4.4) \begin{aligned} IV(a)=-\sum\limits_{v=1}^{\vert{V}\vert}\frac{\vert{D^{v}}\vert}{\vert{D}\vert}\rm{log}_{2}\it{\frac{\vert{D^{v}}\vert}{\vert{D}\vert}} \end{aligned} \tag{4.4} IV(a)=−v=1∑∣V∣∣D∣∣Dv∣log2∣D∣∣Dv∣(4.4)
4.2.3 基尼指数
数据集
D
D
D的纯度可用基尼值来度量,基尼值越小,数据集
D
D
D的纯度越高:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
1
p
k
p
k
′
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
(4.5)
\begin{aligned} Gini(D)&=\sum\limits_{k=1}^{\vert{y}\vert}\sum\limits_{{k}\prime\neq1}p_{k}p_{k\prime}\\ &=1-\sum\limits_{k=1}^{\vert y \vert}p_{k}^{2} \end{aligned} \tag{4.5}
Gini(D)=k=1∑∣y∣k′=1∑pkpk′=1−k=1∑∣y∣pk2(4.5)
属性 a a a的基尼指数定义为:
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) (4.6) \begin{aligned} Gini\_index(D,a)&=\sum\limits_{v=1}^{V}\frac{\vert D^{v}\vert}{\vert D\vert}Gini(D^{v}) \end{aligned} \tag{4.6} Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)(4.6)