1.决策树总览
- 决策树是一种基本的分类与回归方法。
- 据册数模型时描述对样本进行分类的树形结构。树由结点和有向边组成:
- 内部结点表示i个特征或者属性。
- 叶子节点表示一个分类。
- 有向边代表一个划分规则。
- 决策树从根节点到子节点的有向边代表了一条路径。决策树的路径是互斥并且是完备的。
- 用决策树分类时,对样本的某个特征进行测试,根据测试结果将样本分配到树的子结点上。此时每个结点对应特征的一个取值。
递归地对样本测试,知道该样本被划分叶子节点。最后将分配为叶结点所属的类。 - 决策树的优点:可读性强,分类速度快
- 决策树学习通常包括三个步骤:
- 特征选择
- 决策树生成
- 决策树剪枝
2. 原理
2.1 基本概念
决策树模型可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
决策树将特征空间划分为互不相交的单元,在每个单元定义一个类的概率分布,这就构成了一个条件概率分布。
- 决策树的每一条路径对应于划分中的一个基本单元。
- 设谋个单元
S
\mathbb{S}
S内部有
N
S
N_{S}
NS个样本点,则它定义了一个条件概率
p
(
y
∣
x
→
)
,
x
→
∈
S
0
p(y \mid \overrightarrow{\mathbf{x}}), \overrightarrow{\mathbf{x}} \in \mathbb{S}_{0}
p(y∣x),x∈S0。
- 单元上的条件概率偏向哪个类,则该单元划归到该类的概率较大。即单元的类别为:
arg max y p ( y ∣ x → ) , x → ∈ S \arg \max _{y} p(y \mid \overrightarrow{\mathbf{x}}), \overrightarrow{\mathbf{x}} \in \mathbb{S} argymaxp(y∣x),x∈S - 决策树所代表的条件概率分布由各个单元给定条件下类的条件概率分布组成。
- 单元上的条件概率偏向哪个类,则该单元划归到该类的概率较大。即单元的类别为:
决策树的学习目标是:根据给定的训练数据集构造一个决策树模型,使得它能够对样本进行正确的分类。
决策树最优化的策略是:损失函数最小化。决策树的损失函数通常是正则化的极大似然函数。
选择最优决策树的问题是个 NP 完全问题。一般采用启发式方法近似求解这个最优化问题,这时的解为次最优的。
决策树学习的算法通常递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类。
这一过程对应着特征空间的划分,也对应着决策树的构建。
1.2 生成决策树生成算法:
构建根结点:将所有训练数据放在根结点。
选择一个最优特征,根据这个特征将训练数据分割成子集,使得各个子集有一个在当前条件下最好的分类。
- 若这些子集已能够被基本正确分类,则将该子集构成叶结点。
- 若某个子集不能够被基本正确分类,则对该子集选择新的最优的特征,继续对该子集进行分割,构建相应的结点。
如此递归下去,直至所有训练数据子集都被基本正确分类,或者没有合适的特征为止。
上述生成的决策树可能对训练数据有很好的分类能力,但是对于未知的测试数据却未必有很好要的分类能力,即可能发生过拟合的现象。
- 解决的方法是:对生成的决策树进行剪枝,从而使得决策树具有更好的泛化能力。
- 剪枝是去掉过于细分的叶结点,使得该叶结点中的子集回退到父结点或更高层次的结点并让其成为叶结点。
决策树的生成对应着模型的局部最优,决策树的剪枝则考虑全局最优。
如果学习任意大小的决策树,则可以将决策树算法视作非参数算法。但是实践中经常有大小限制(如限制树的高度、限制树的叶结点数量),从而使得决策树成为有参数模型。
3. 特征选择
特征选择的关键是:选取对训练数据有较强分类能力的特征。若一个特征的分类结果与随机分类的结果没有什么差别,则称这个特征是没有分类能力的。
通常特征选择的指标是:信息增益或者信息增益比。这两个指标刻画了特征的分类能力。
对于分布满足 p ( y ) p(y) p(y),熵为: H ( y ) = ∑ y − p ( y ) log p ( y ) H(y)=\sum_{y}-p(y) \log p(y) H(y)=y∑−p(y)logp(y)定义数据集 D \mathbb{D} D的经验熵为: H ( D ) = − ∑ k = 1 K N k N log N k N H(\mathbb{D})=-\sum_{k=1}^{K} \frac{N_{k}}{N} \log \frac{N_{k}}{N} H(D)=−k=1∑KNNklogNNk其中:
- 样本的类别分别为 c 1 , c 2 , ⋯ , c K c_{1}, c_{2}, \cdots, c_{K} c1,c2,⋯,cK。
- 类别 c k c_{k} ck 的样本的数量为 N k N_{k} Nk, 所有样本的总数为 N N N 。因此有: ∑ k = 1 K N k = N \sum_{k=1}^{K} N_{k}=N \text {} k=1∑KNk=N
- N k N \frac{N_{k}}{N} NNk 是概率 p ( y = c k ) p\left(y=c_{k}\right) p(y=ck) 的估计。
- H ( D ) H(\mathbb{D}) H(D) 就是熵 H ( y ) H(y) H(y) 的估计。它刻画了数据集 D \mathbb{D} D 中样本的类别分布情况。
对于特征A,定义数据集
D
\mathbb{D}
D 在 上的经验熵为:
H
A
(
D
)
=
−
∑
i
=
1
n
A
N
a
i
N
log
N
a
i
N
H_{A}(\mathbb{D})=-\sum_{i=1}^{n_{A}} \frac{N_{a_{i}}}{N} \log \frac{N_{a_{i}}}{N}
HA(D)=−∑i=1nANNailogNNai 。
其中:
- 特征 A A A 的取值范围为 { a 1 , a 2 , ⋯ , a n A } \left\{a_{1}, a_{2}, \cdots, a_{n_{A}}\right\} {a1,a2,⋯,anA} 。
- 属性 A = a i A=a_{i} A=ai 的样本的数量为 N a i N_{a_{i}} Nai,因此有: ∑ i = 1 n A N a i , k = N k \sum_{i=1}^{n_{A}} N_{a_{i}, k}=N_{k} i=1∑nANai,k=Nk
- N a i N \frac{N_{a_{i}}}{N} NNai 是概率 p ( A = a i ) p\left(A=a_{i}\right) p(A=ai) 的估计。
- H A ( D ) H_{A}(\mathbb{D}) HA(D) 刻画了数据集 D \mathbb{D} D 中的样本在属性 A A A 上的取值分布情况。
对于特征A,其条件熵为: H ( y ∣ A ) = ∑ A p ( A ) H ( y ∣ A ) H(y \mid A)=\sum_{A} p(A) H(y \mid A) H(y∣A)=A∑p(A)H(y∣A)定义数据集 D \mathbb{D} D 关于特征 A A A 的经验条件熵为: H ( D ∣ A ) = ∑ i = 1 n A p ( A = a i ) H ( y ∣ A = a i ) = ∑ i = 1 n A N a i N [ − ∑ k = 1 K N a i , k N a i log N a i , k N a i ] H(\mathbb{D} \mid A)=\sum_{i=1}^{n_{A}} p\left(A=a_{i}\right) H\left(y \mid A=a_{i}\right)=\sum_{i=1}^{n_{A}} \frac{N_{a_{i}}}{N}\left[-\sum_{k=1}^{K} \frac{N_{a_{i}, k}}{N_{a_{i}}} \log \frac{N_{a_{i}, k}}{N_{a_{i}}}\right] H(D∣A)=i=1∑nAp(A=ai)H(y∣A=ai)=i=1∑nANNai[−k=1∑KNaiNai,klogNaiNai,k]其中:
- 属性 A = a i A=a_{i} A=ai 且类别为 c k c_{k} ck 的样本的数量为 N a i , k N_{a_{i}, k} Nai,k, 所有样本的总数为 N N N 。因此有: ∑ k = 1 K N a i , k = N a i , ∑ i = 1 n A N a i = ∑ k = 1 K N k = N ∘ \sum_{k=1}^{K} N_{a_{i}, k}=N_{a_{i}}, \sum_{i=1}^{n_{A}} N_{a_{i}}=\sum_{k=1}^{K} N_{k}=N_{\circ} k=1∑KNai,k=Nai,i=1∑nANai=k=1∑KNk=N∘
- − ∑ k = 1 K N a i , k N a i log N a i , k N a i -\sum_{k=1}^{K} \frac{N_{a_{i}, k}}{N_{a_{i}}} \log \frac{N_{a_{i}, k}}{N_{a_{i}}} −∑k=1KNaiNai,klogNaiNai,k是条件熵 H ( y ∣ A = a i ) H\left(y \mid A=a_{i}\right) H(y∣A=ai) 的估计。它刻画了数据集 D \mathbb{D} D 中, 属性 A = a i A=a_{i} A=ai 中的那些样本中的类别的分布情况。
- H ( D ∣ A ) H(\mathbb{D} \mid A) H(D∣A) 是条件熵 H ( y ∣ A ) H(y \mid A) H(y∣A) 的估计。
3.1 信息增益
特征
A
A
A 对训练数据集
D
\mathbb{D}
D 的信息增益
g
(
D
,
A
)
g(\mathbb{D}, A)
g(D,A) 定义为:集合
D
\mathbb{D}
D 的经验商
H
(
D
)
H(\mathbb{D})
H(D) 与关于特征
A
A
A 经验条件熵
H
(
D
∣
A
)
H(\mathbb{D} \mid A)
H(D∣A) 之差。即:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(\mathbb{D}, A)=H(\mathbb{D})-H(\mathbb{D} \mid A)
g(D,A)=H(D)−H(D∣A) 。
由于熵
H
(
y
)
−
H
(
y
∣
A
)
H(y)-H(y \mid A)
H(y)−H(y∣A) 也称作互信息, 因此信息增益也等于训练数据集中类与特征的互信息。
决策树学习可以应用信息增益来选择特征。给定训练集 D \mathbb{D} D 和特征 A A A :
- 经验熵 H ( D ) H(\mathbb{D}) H(D) 刻画了对数据集 D \mathbb{D} D 进行分类的不确定性。
- 经验条件熵 H ( D ∣ A ) H(\mathbb{D} \mid A) H(D∣A) 刻画了在特征 A A A 给定条件下,对数据集 D \mathbb{D} D 分类的不确定性。
- 信息增益 H ( D ) − H ( D ∣ A ) H(\mathbb{D})-H(\mathbb{D} \mid A) H(D)−H(D∣A) 刻画了由于特征 A A A 的确定, 从而使得对数据集 D \mathbb{D} D 的分类的不确定性减少的 程度。
不同的特征往往具有不同的信息增益。
- 信息增益大的特征具有更强的分类能力
- 如果一个特征的信息增益为0,则表示该特征没有什么分类能力
3.2 信息增益比
以信息增益作为划分训练集的特征选取方案,存在偏向于选取值较多的特征的问题。
公式:
H
(
D
∣
A
)
=
∑
i
=
1
n
A
N
a
i
N
[
−
∑
k
=
1
K
N
α
i
,
k
N
a
i
log
N
a
i
,
k
N
a
i
]
H(\mathbb{D} \mid A)=\sum_{i=1}^{n_{A}} \frac{N_{a_{i}}}{N}\left[-\sum_{k=1}^{K} \frac{N_{\alpha_{i}, k}}{N_{a_{i}}} \log \frac{N_{a_{i}, k}}{N_{a_{i}}}\right]
H(D∣A)=∑i=1nANNai[−∑k=1KNaiNαi,klogNaiNai,k]中:
- 当极限情况下,特征
A
A
A 在每个样本上的取值都不同, 即
n
A
=
N
n_{A}=N
nA=N 。
- 此时特征 A A A 将每一个样本都划分到不同的子结点。即: N a i = 1 , i = 1 , ⋯ , n A N_{a_{i}}=1, \quad i=1, \cdots, n_{A} Nai=1,i=1,⋯,nA 。
- 由于 ∑ k = 1 K N a i , k = N a i = 1 , \sum_{k=1}^{K} N_{a_{i}, k}=N_{a_{i}}=1 , ∑k=1KNai,k=Nai=1, 因此有: N a i , k ≤ 1 , i = 1 , ⋯ , n A ; k = 1 , ⋯ , K N_{a_{i}, k} \leq 1, \quad i=1, \cdots, n_{A} ; \quad k=1, \cdots, K Nai,k≤1,i=1,⋯,nA;k=1,⋯,K 即: N a i , k N_{a_{i}, k} Nai,k 取值为 0 或者 1 。因此有: N a i , k N a i log N a i , k N a i = 0 \frac{N_{a_{i}, k}}{N_{a_{i}}} \log \frac{N_{a_{i}, k}}{N_{a_{i}}}=0 NaiNai,klogNaiNai,k=0 。
- 最终使得 H ( D ∣ A ) = 0 H(\mathbb{D} \mid A)=0 H(D∣A)=0
- 条件熵的最小值为 0,这意味着该情况下的信息增益达到了最大值。
- 然而很显然这个特征A显然不是最佳选择,因为它并不具有任何分类能力。
可以通过定义信息增益比来解决该问题。
特征
A
A
A 对训练集
D
\mathbb{D}
D 的信息增益比
g
R
(
D
,
A
)
g_{R}(\mathbb{D}, A)
gR(D,A) 定义为:信息增益
g
(
D
,
A
)
g(\mathbb{D}, A)
g(D,A) 与关于特征
A
A
A 的熵
H
A
(
D
)
H_{A}(\mathbb{D})
HA(D) 之比:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_{R}(\mathbb{D}, A)=\frac{g(\mathbb{D}, A)}{H_{A}(\mathbb{D})}
gR(D,A)=HA(D)g(D,A)
H
A
(
D
)
H_{A}(\mathbb{D})
HA(D) 表征了特征
A
A
A 对训练集
D
\mathbb{D}
D 的拆分能力。
因为
H
A
(
D
)
H_{A}(\mathbb{D})
HA(D) 只考虑样本在特征
A
A
A 上的取值, 而不考虑样本的标记
y
y
y, 所以这种拆分并不是对样本的分类。
信息增益比本质上是对信息增益乘以一个权重系数:
- 当特征A的取值集合较大时,加权系数较小,表示抑制该特征。
- 当特征A的取值集合较小时,加权系数较大,表示鼓励该特征。