决策树系列算法介绍和实战,未完待续!
一、概述
决策树算法的大致流程如下:
注:下图的数据集为后续操作的训练数据集
二、特征选择(feature selection)
特征是机器学习中自变量的别名。特征选择就是在一系列自变量中选择出对分类最有用的变量。
特征选择是一个较大知识领域,主要目的是筛选出对项目目标有帮助的样本属性。在决策树中,特征选择有三大主流方法,分别是信息增益、增益率、基尼系数。其中信息增益和增益率都是由Quinlan创造的。
参考西瓜书第十一章特征选择与稀疏学习
1. 信息增益
信息量
随机事件x,发生概率的对数的相反数。或者随机事件x带给我们的信息量。用I(x)表示,单位是bit 比特。
I
(
x
i
)
=
−
log
2
p
(
x
i
)
I\left(x_{i}\right)=-\log _{2} p\left(x_{i}\right)
I(xi)=−log2p(xi)
例如,事件x;掷骰子,六点朝上。概率P(x)=1/6,I(x)=2.58(bit)。以2为底,表示二进制(两种状态)。
注意,下列计算结果均为近似值,这里以等号表示
事件y;小明今天吃饭了。P(x)=99.99%. I(y)=0.00015(bit)
事件z:某沿海地区发生海啸 P(z) = 0.01% I(z)=13.288(bit)
有关系式可以得出,概率与信息量呈负相关关系。一件事发生的概率越小,其信息量越大。在现实生活中也是一样,比如有人对你说,你们明天放长假,你肯定会想,这个信息量有点大。
信息熵(Information Entropy)
统计学角度:
设随机变量X取值于
x
i
∣
i
=
1
,
2
,
.
.
.
,
n
{x_i|i=1,2,...,n}
xi∣i=1,2,...,n,
x
i
x_i
xi出现的概率为
p
(
x
i
)
p(x_i)
p(xi),则有
∑
i
=
1
n
p
(
x
i
)
=
1
\sum_{i=1}^np(x_i) =1
∑i=1np(xi)=1
那么所有可能事件
x
i
x_i
xi,的自信息量
I
(
x
i
)
I(x_i)
I(xi)的加权平均定义为随机变量X的信息熵,简称熵,记为
H
(
X
)
H(X)
H(X)。即:
H ( X ) = ∑ i = 1 n p ( x i ) I ( x i ) = − ∑ i = 1 n p ( x i ) log 2 p ( x i ) H(X) = \sum_{i=1}^np(x_i)I(x_i) = -\sum_{i=1}^np(x_i)\log_2p(x_i) H(X)=i=1∑np(xi)I(xi)=−i=1∑np(xi)log2p(xi)
为方便起见,约定 p ( x i ) = 0 p(x_i)= 0 p(xi)=0时, p ( x i ) log 2 p ( x i ) = 0 p(x_i)\log_2p(x_i) = 0 p(xi)log2p(xi)=0。
人工智能角度:
信息熵是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第 k k k类样本所占比例为 p k ( k = 1 , 2 , . . . , y ) p_k (k=1,2,...,y) pk(k=1,2,...,y)。则样本集合 D D D的信息熵定义为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log 2 p k Ent(D) = - \sum_{k=1}^{|y|}p_k\log_2p_k Ent(D)=−k=1∑∣y∣pklog2pk
显然 E n t ( D ) Ent(D) Ent(D)的值越小,则 D D D的纯度越高。
假定西瓜的属性“色泽”有三个可能的取值{“青绿”“乌黑”“浅白”},若使用“色泽”来对样本集
D
D
D进行划分,则会产生三个分支结点,其中第
v
v
v个分支结点包含了
D
D
D中所有在“色泽”上取值为
a
v
a^v
av的样本,记为
D
v
D^v
Dv。现在可以根据上式分别计算出的信息熵。
D
青
绿
=
−
(
3
6
log
2
3
6
+
3
6
log
2
3
6
)
=
1.00
D^{青绿} = -(\frac{3}{6}\log_2\frac{3}{6}+\frac{3}{6}\log_2\frac{3}{6})=1.00
D青绿=−(63log263+63log263)=1.00
D
乌
黑
=
−
(
4
6
log
2
4
6
+
4
6
log
2
4
6
)
=
0.918
D^{乌黑} = -(\frac{4}{6}\log_2\frac{4}{6}+\frac{4}{6}\log_2\frac{4}{6})=0.918
D乌黑=−(64log264+64log264)=0.918
D
浅
白
=
−
(
1
5
log
2
1
5
+
4
5
log
2
4
5
)
=
0.722
D^{浅白} = -(\frac{1}{5}\log_2\frac{1}{5}+\frac{4}{5}\log_2\frac{4}{5})=0.722
D浅白=−(51log251+54log254)=0.722
现在通过“色泽”属性,我们将样本集划分为三个分支结点
D
青
绿
、
D
乌
黑
、
D
浅
白
D^{青绿}、D^{乌黑}、D^{浅白}
D青绿、D乌黑、D浅白,但由于它们包含的样本数不同,在所占比例不同,所以需要对每个分支结点赋予权重
∣
D
v
∣
∣
D
∣
\frac{|D^v|}{|D|}
∣D∣∣Dv∣,即样本数越多的分支节点影响越大。
信息增益(Information gain)
于是可计算出用属性“色泽”对样本集 D D D进行划分所获得的“信息增益”。从下方公式可以得出信息增益的现实意义:主要是划分前的样本集的信息熵减去划分后的样本集信息熵的加权和。
Gain ( D , a ) = Ent ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ( D v ) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性。ID3全称为Iterative Dichotomiser 3(迭代二分类器),分类器是一切的根源啊,神经网络也可以通过简单的线性分类器推导得出。
ID3决策树参考资料
2. 增益率(gain ratio)
增益率的出现可能是源于对信息增益的缺陷弥补。设想这样一种情况,将数据集的编号也作为一个属性,计算其信息增益。
Gain
(
D
,
a
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
可以很容易得出下面的结果,因为根据编号划分,n个样本就被划分为n个分支结点,分支只有一个样本,纯度已经达到最大。
Gain
(
D
,
编
号
)
=
0.998
−
∑
v
=
1
V
∣
1
∣
∣
1
∣
(
−
∑
k
=
1
∣
y
∣
1
log
2
1
)
=
0.998
\operatorname{Gain}(D, 编号)=0.998-\sum_{v=1}^{V} \frac{\left|1\right|}{|1|} (- \sum_{k=1}^{|y|}1\log_21) = 0.998
Gain(D,编号)=0.998−v=1∑V∣1∣∣1∣(−k=1∑∣y∣1log21)=0.998
所以信息增益准则对取值数目较多的属性有所偏好,为了解决这一问题,信息增益的作者又创造了增益率。
增益率定义为:
Gain-ratio
(
D
,
a
)
=
Gain
(
D
,
a
)
I
V
(
a
)
\operatorname{Gain-ratio}(D, a)=\frac{\operatorname{Gain}(D,a)}{IV(a)}
Gain-ratio(D,a)=IV(a)Gain(D,a)
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ IV(a) = -\sum_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性a的“固有值”(intrinsic value)。属性a的可能取值数目越多(即V越大),则 I V ( a ) IV(a) IV(a)的值通常会越大。
著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性。因为增益率准则对可取值数目较少的属性有所偏好,所以C4.5算法使用启发式规则,先从候选划分属性中找出信息增益率高于平均水平的属性,再从中选择增益率最高的。
3. 基尼指数(gini index)
CART(Classification and Regression Tree)决策树使用基尼指数来选择划分属性。CART决策树既可以分类也可以回归哦!
数据集的纯度可以用基尼值来度量,基尼值:
Gini
(
D
)
=
∑
k
=
1
∣
Y
∣
∑
k
′
≠
k
p
k
p
k
′
=
∑
k
=
1
∣
Y
∣
p
k
−
∑
k
=
1
∣
Y
∣
p
k
2
=
1
−
∑
k
=
1
∣
Y
∣
p
k
2
.
p
k
′
=
1
−
p
k
\begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ & =\sum_{k=1}^{|\mathcal{Y}|}p_k - \sum_{k=1}^{|\mathcal{Y}|}p_k^2 \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} . \end{aligned} \\ p_{k^{\prime}} = 1- p_k
Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=k=1∑∣Y∣pk−k=1∑∣Y∣pk2=1−k=1∑∣Y∣pk2.pk′=1−pk
直观看出,
Gini
(
D
)
\operatorname{Gini}(D)
Gini(D)反应了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此
Gini
(
D
)
\operatorname{Gini}(D)
Gini(D)越小,数据集D的纯度越高。因此,属性a的基尼指数:
Gini
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Gini
(
D
v
)
\operatorname{Gini} i n d e x(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)
Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
我们选择使得划分后基尼指数最小的属性作为最优划分属性,即:
a ∗ = arg min a ∈ A Gini-index ( D , a ) a_{*}=\underset{a \in A}{\arg \min } \text { Gini-index }(D, a) a∗=a∈Aargmin Gini-index (D,a)
三、生成决策树
ID3算法
缺点:
- 采用信息增益作为划分选择,信息增益对可取值数目较多的属性有所偏好。
- 没有考虑连续性值的属性以及有缺失值的属性
- 没有考虑过拟合
C4.5
基于ID3基础上进行改进
- 使用信息增益率作为划分选择,克服了对可取值数目较多的属性的偏好。
- 能处理离散型和连续型的属性值的训练数据,即将连续型的属性进行离散化处理。
- 能够处理具有缺失属性值的训练数据
- 构造决策树之后进行剪枝操作,考虑过拟合。
缺点:
- 增益率准则对可取值数目较少的属性有所偏好
- C4.5生成多叉树,效率没有二叉树高
- 只能用于分类,不能用于回归
- 使用了熵模型,有大量耗时的对数运算,如果是连续值还有大量的排序运算,运行效率较低。
对比
算法 | 作用 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 | 分类变量 | 样本偏好 |
---|---|---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 | 离散变量 | |
C4.5 | 分类 | 多叉树 | 增益率 | 支持 | 支持 | 支持 | 离散和连续变量 | 小样本 |
CART | 分类和回归 | 二叉树 | 基尼指数 | 支持 | 支持 | 支持 | 离散和连续变量 | 大样本 |
四、剪枝
解决决策树过拟合的问题,将训练集的一些自身特性当作全部数据都具有的特征。
预剪枝
在生成决策树的过程中,若进行划分能带来验证集准确率的提高,则划分节点。否则不划分节点。虽然当前分支的划分不会提升泛化性能,但在其基础上进行的后续划分却有可能显著提升性能,可能会造成欠拟合。
后剪枝
在生成决策树后,从下到上,对非叶子节点进行判断,若将其替换为叶子节点能带来验证集准确率提升,则替换。
一般情况下,后剪枝决策树欠拟合风险很小,泛化性能要优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对所有非叶节点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。