文章目录
决策树
一、什么是决策树
决策树是一种基于树结构的分类与回归方法,他能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。
例如,我们看到一个人穿着剪裁得体的西装,修身干练的衬衫,那么我们最起码认为这个人仪表大方,干干净净,然后这个人谈吐得体,态度温和,那么我们说这个人很有气质。最终我们得出一个简单的决策:这个人值得交朋友。上述中,“西装衬衫”可以视为一种特征,那么“干净”就可以视为标签。
决策树学习通常包括3个步骤:
1. 特征选择
2. 决策树生成
3. 决策树剪枝
二、特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。决策树的目的就是让模型的不确定性降低的越快越好。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。那如何衡量一个特征是否具有分类能力?通常特征选择的准则是信息增益或信息增益比。
2.1 信息增益
划分数据的原则是:将无序的数据变得更加有序。在划分数据集前后,信息发生的变化称为信息增益。那么,如何定义信息呢?这里我们引入熵的概念。
在信息论与概率统计中,熵是表示随机变量不确定性的度量(物理学中定义为混乱度)。假设集合中的变量X = {
x
1
,
x
2
,
x
3
,
.
.
.
,
x
n
x_1,x_2,x_3,...,x_n
x1,x2,x3,...,xn },它对应在集合中的概率是P = {
P
1
,
P
2
,
P
3
,
.
.
.
,
P
n
P_1,P_2,P_3,...,Pn
P1,P2,P3,...,Pn },则那么X的熵就定义为:
H
(
X
)
=
−
∑
i
=
1
n
P
i
∗
l
o
g
2
(
P
i
)
H(X) = -\sum_{i=1}^n P_i*log_2(P_i)
H(X)=−i=1∑nPi∗log2(Pi)
信息增益就可以理解为父节点的熵减去子节点的熵。信息增益越大,新节点较父节点来说,混乱度更低,纯度提升更大。信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
根据信息增益准则的特征选择方法是:对训练数据集D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
信息增益计算练习:
下表是一个由15个样本组成的贷款申请训练数据。数据包括贷款申请人的4个特征:年龄,有工作,有自己的房子,信贷情况。标签为是否同意贷款。
根据信息增益准则选择最优特征:
ID | 年龄 | 有工作 | 有自己的房子 | 信贷情况 | 类别 |
---|---|---|---|---|---|
1 | 青年 | 否 | 否 | 一般 | 否 |
2 | 青年 | 否 | 否 | 好 | 否 |
3 | 青年 | 是 | 否 | 好 | 是 |
4 | 青年 | 是 | 是 | 一般 | 是 |
5 | 青年 | 否 | 否 | 一般 | 否 |
6 | 中年 | 否 | 否 | 一般 | 否 |
7 | 中年 | 否 | 否 | 好 | 否 |
8 | 中年 | 是 | 是 | 好 | 是 |
9 | 中年 | 否 | 是 | 非常好 | 是 |
10 | 中年 | 否 | 是 | 非常好 | 是 |
11 | 老年 | 否 | 是 | 非常好 | 是 |
12 | 老年 | 否 | 是 | 好 | 是 |
13 | 老年 | 是 | 否 | 好 | 是 |
14 | 老年 | 是 | 否 | 非常好 | 是 |
15 | 老年 | 否 | 否 | 一般 | 否 |
根据训练数据进行统计:
Positive | Negative | 汇总 | |
---|---|---|---|
整体 | 9 | 6 | 15 |
青年 | 2 | 3 | 5 |
中年 | 3 | 2 | 5 |
老年 | 4 | 1 | 5 |
有工作 | 5 | 0 | 5 |
没工作 | 4 | 6 | 10 |
有房子 | 6 | 0 | 6 |
没房子 | 3 | 6 | 9 |
信贷一般 | 1 | 4 | 5 |
信贷好 | 4 | 2 | 6 |
信贷非常好 | 4 | 0 | 4 |
首先计算整体熵:
H
(
D
)
=
−
(
9
15
l
o
g
2
(
9
15
)
+
6
15
l
o
g
2
(
6
15
)
)
H(D)= -(\frac{9}{15}log_2(\frac{9}{15}) + \frac{6}{15}log_2(\frac{6}{15}))
H(D)=−(159log2(159)+156log2(156))
=
0.971
= 0.971
=0.971
然后计算各特征对数据集D的信息增益。分别以 A 1 A_1 A1, A 2 A_2 A2, A 3 A_3 A3, A 4 A_4 A4表示年龄、有工作、有自己的房子和信贷情况4个特征,则:
g ( D , A 1 ) = H ( D ) − 5 15 ( − 2 5 l o g 2 ( 2 5 ) − 3 5 l o g 2 ( 3 5 ) ) − 5 15 ( − 3 5 l o g 2 ( 3 5 ) − 2 5 l o g 2 ( 2 5 ) ) − 5 15 ( − 4 5 l o g 2 ( 4 5 ) − 1 5 l o g 2 ( 1 5 ) ) g(D,A_1)=H(D) -\frac{5}{15}(-\frac{2}{5}log_2(\frac{2}{5}) - \frac{3}{5}log_2(\frac{3}{5}))-\frac{5}{15}(-\frac{3}{5}log_2(\frac{3}{5}) - \frac{2}{5}log_2(\frac{2}{5}))-\frac{5}{15}(- \frac{4}{5}log_2(\frac{4}{5}) - \frac{1}{5}log_2(\frac{1}{5})) g(D,A1)=H(D)−155(−52log2(52)−53log2(53))−155(−53log2(53)−52log2(52))−155(−54log2(54)−51log2(51))
= 0.082 = 0.082 =0.082
g
(
D
,
A
2
)
=
H
(
D
)
−
5
15
(
−
5
5
l
o
g
2
(
5
5
)
−
0
5
l
o
g
2
(
0
5
)
)
−
10
15
(
−
4
10
l
o
g
2
(
4
10
)
−
6
10
l
o
g
2
(
6
10
)
)
g(D,A_2)=H(D) -\frac{5}{15}(-\frac{5}{5}log_2(\frac{5}{5}) - \frac{0}{5}log_2(\frac{0}{5}))-\frac{10}{15}(-\frac{4}{10}log_2(\frac{4}{10}) - \frac{6}{10}log_2(\frac{6}{10}))
g(D,A2)=H(D)−155(−55log2(55)−50log2(50))−1510(−104log2(104)−106log2(106))
=
0.324
= 0.324
=0.324
g
(
D
,
A
3
)
=
H
(
D
)
−
6
15
(
−
6
6
l
o
g
2
(
6
6
)
−
0
6
l
o
g
2
(
0
6
)
)
−
9
15
(
−
3
9
l
o
g
2
(
3
9
)
−
6
9
l
o
g
2
(
6
9
)
)
g(D,A_3)=H(D) -\frac{6}{15}(-\frac{6}{6}log_2(\frac{6}{6}) - \frac{0}{6}log_2(\frac{0}{6}))-\frac{9}{15}(-\frac{3}{9}log_2(\frac{3}{9}) - \frac{6}{9}log_2(\frac{6}{9}))
g(D,A3)=H(D)−156(−66log2(66)−60log2(60))−159(−93log2(93)−96log2(96))
=
0.420
= 0.420
=0.420
g ( D , A 4 ) = H ( D ) − 5 15 ( − 1 5 l o g 2 ( 1 5 ) − 4 5 l o g 2 ( 4 5 ) ) − 6 15 ( − 4 6 l o g 2 ( 4 6 ) − 2 6 l o g 2 ( 2 6 ) ) − 4 15 ( − 4 4 l o g 2 ( 4 4 ) − 0 4 l o g 2 ( 0 4 ) ) g(D,A_4)=H(D) -\frac{5}{15}(-\frac{1}{5}log_2(\frac{1}{5}) - \frac{4}{5}log_2(\frac{4}{5}))-\frac{6}{15}(-\frac{4}{6}log_2(\frac{4}{6}) - \frac{2}{6}log_2(\frac{2}{6}))-\frac{4}{15}(- \frac{4}{4}log_2(\frac{4}{4}) - \frac{0}{4}log_2(\frac{0}{4})) g(D,A4)=H(D)−155(−51log2(51)−54log2(54))−156(−64log2(64)−62log2(62))−154(−44log2(44)−40log2(40))
= 0.363 = 0.363 =0.363
最后,比较各特征的信息增益值。由于特征 A 3 A_3 A3(有自己的房子)的信息增益值最大,所以选择特征 A 3 A_3 A3作为最优特征。
2.2 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。分支越多,子节点的信息熵就会越小,纯度就会越高。假如我们对ID列进行切分,那每个分类纯度都是1,这样的分支是没有意义的。使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。
这里我们通过引入分支度的概念,来对信息增益的计算方法进行修正。简而言之,就是在信息增益计算方法的子节点总信息上的计算方法中添加了随分类变量水平的惩罚项。而分支度的计算公式仍然是基于熵的算法,只是将信息熵计算公式中的 p ( i ∣ t ) p(i|t) p(i∣t),即某类别样例占总样例比改成了 P ( V i ) P(V_i) P(Vi),即某子节点的总样本数占父节点总样本数的比例,可以理解为权重。这样在切分时,就可以避免那些分类数目较多,信息熵减小过快的特征影响模型,减少过拟合情况。
信息增益比:
特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益g(D,A)与其训练数据集D关于特征A的值的熵 H A ( D ) H_A(D) HA(D)之比,即:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A) = \frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
其中:
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
D
l
o
g
2
∣
D
i
∣
D
H_A(D) = -\sum_{i=1}^n \frac{|D_i|}{D}log_2\frac{|D_i|}{D}
HA(D)=−i=1∑nD∣Di∣log2D∣Di∣
n是特征A取值的个数
以上面的训练数据为例:
g
R
(
D
,
A
1
)
=
0.082
/
(
−
5
15
∗
l
o
g
2
5
15
−
5
15
∗
l
o
g
2
5
15
−
5
15
∗
l
o
g
2
5
15
)
g_R(D,A_1) = 0.082 / (-\frac{5}{15} * log_2\frac{5}{15} -\frac{5}{15} * log_2\frac{5}{15}-\frac{5}{15} * log_2\frac{5}{15})
gR(D,A1)=0.082/(−155∗log2155−155∗log2155−155∗log2155)
=
0.052
= 0.052
=0.052
g
R
(
D
,
A
2
)
=
0.324
/
(
−
5
15
∗
l
o
g
2
5
15
−
10
15
∗
l
o
g
2
10
15
)
g_R(D,A_2) = 0.324 / (-\frac{5}{15} * log_2\frac{5}{15} -\frac{10}{15} * log_2\frac{10}{15})
gR(D,A2)=0.324/(−155∗log2155−1510∗log21510)
=
0.353
=0.353
=0.353
g
R
(
D
,
A
3
)
=
0.420
/
(
−
6
15
∗
l
o
g
2
6
15
−
9
15
∗
l
o
g
2
9
15
)
g_R(D,A_3) = 0.420 / (-\frac{6}{15} * log_2\frac{6}{15} -\frac{9}{15} * log_2\frac{9}{15})
gR(D,A3)=0.420/(−156∗log2156−159∗log2159)
=
0.433
=0.433
=0.433
g
R
(
D
,
A
4
)
=
0.363
/
(
−
5
15
∗
l
o
g
2
5
15
−
6
15
∗
l
o
g
2
6
15
−
4
15
∗
l
o
g
2
4
15
)
g_R(D,A_4) = 0.363 / (-\frac{5}{15} * log_2\frac{5}{15} -\frac{6}{15} * log_2\frac{6}{15}-\frac{4}{15} * log_2\frac{4}{15})
gR(D,A4)=0.363/(−155∗log2155−156∗log2156−154∗log2154)
=
0.232
=0.232
=0.232
最后,比较各特征的信息增益比。由于特征 A 3 A_3 A3(有自己的房子)的信息增益比最大,所以选择特征 A 3 A_3 A3作为最优特征。
2.3 基尼系数
信息增益和信息增益比都是基于信息论的熵模型来计算的,其涉及大量的对数计算( l o g 2 log_2 log2)。为了简化运算,可以使用基尼系数作为分类标准。
基尼指数表示一个随机选中的样本在子集中被分错的可能性。基尼指数为这个样本被选中的概率乘以它被分错的概率。直观来说,基尼指数反映了从数据集D中随机抽取两个样本,其类别不一致的概率。因此,基尼指数越小,则数据集D的纯度越高。
现在我们来看下基尼系数是如何简化运算的:
对于样本空间D,其纯度可以使用基尼系数来度量:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
p
k
)
2
Gini(D) = 1-\sum_{k=1}^K(p_k)^2
Gini(D)=1−k=1∑K(pk)2
如果是二分类问题,则基尼系数转化为:
G
i
n
i
(
D
)
=
2
p
(
1
−
p
)
Gini(D) = 2p(1-p)
Gini(D)=2p(1−p)
大大减少了计算量。
三、决策树的生成
3.1 ID3算法
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建议子节点;再对子节点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一棵决策树。
ID3算法的缺点
- ID3不能直接处理连续型特征,比如长度,密度都是连续值,无法在ID3中运用
- ID3对缺失值敏感
- ID3没有剪枝操作,容易过拟合
- ID3以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题
3.2 C4.5算法
由于ID3以上种种缺点,产生了C4.5算法。C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。
3.2.1 C4.5进行的改进手段
1. 连续变量处理手段
如果输入特征字段是连续型变量,则有以下步骤:
1. 首先对该连续特征进行从小到大排序
2. 选取相邻的两个数的平均数作为切分数据集的备选点。假设一个连续特征有n个值,则产生n-1个切分点,每个切分点代表一种二叉树的切分方案。
3. 计算每个切分方案的信息增益率,选择信息增益率最大的点作为该连续特征的二元分类点。
2. 缺失值处理
a. 如何在属性值缺失的情况下进行划分属性的选择?
对于具有缺失值特征,用没有缺失的样本子集所占比重来折算。假设数据集一共10000个样本,特征A中缺失了5000个,则无视缺失值,在剩下的5000个特征中计算信息增益(或者信息增益率),最后乘以0.5,思想就是缺失值多的特征通过这种降低权重的方式来体现信息的缺失;
b. 给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分(也就是模型建立完,切分特征在预测数据中存在缺失值)?
这种情况将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。假设某特征有100个样本,特征值X包括a,b,c,各自样本数量为20,30,50。则X划分为a,b,c三个节点,每个节点对应权重为2/10,3/10,5/10。
3. 引入悲观剪枝策略进行后剪枝
C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。
4. 使用信息增益比(率)作为划分标准
3.2.2 C4.5算法的缺点
- ID3和C4.5生成的都是多叉树,即一个父节点可以有多个节点,模型训练效率较低。如果使用二叉树,可以提高效率
- ID3和C4.5都只能用于分类,不能进行回归预测
- 无论是ID3还是C4.5,使用的都是基于信息论的熵模型,拥有大量的对数运算,相当耗时。
- 剪枝策略有优化的空间
3.3 CART算法
现在被大量使用的是C4.5的改进算法CART树。CART数使用基尼系数作为划分标准切分节点。CART树本质其实与C4.5区别不大,只不过CART树每层都是二叉树。而且CART树既能进行分类预测,也能进行回归预测。
四、决策树的剪枝
决策树算法递归地产生叶子节点,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
在决策树学习中将已生成的树进行简化的过程称为剪枝。剪枝是决策树学习算法对付过拟合的主要手段。剪枝的基本策略有“预剪枝”和“后剪枝”。
预剪枝是指在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛华性能提升,则停止划分并将当前结点标记为叶节点;
后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。
决策树的剪枝往往通过极小化决策树整体的损失函数来实现。设树T的叶节点个数为|T|,t是树T的叶节点,该节点上有
N
t
N_t
Nt个样本点,其中k类的样本点有
N
t
k
N_{tk}
Ntk个,k=1,2,…,K,$H_t(T)为叶节点的经验熵,α≥0为参数,则决策树的损失函数可以定义为:
即每个叶子节点的 样本点数量 * 该结点的信息熵,再加上一个正则项。
这里推荐一篇Blog:关于决策树损失函数来源的理解与推导来更好的理解损失函数。
五、决策树优缺点
- 优点
- 简单,直观,可解释性强
- 不需要进行数据预处理,不需要处理缺失值,数据归一化等
- 既可以处理连续型特征也可以处理离散型特征
- 缺点
- 容易过拟合
- 不考虑数据之间相关性
- 样本不均衡会影响算法准确性
六、算法引申
1. 多变量决策树
无论是ID3,C4.5还是CART树,在特征选择的时候都是选择最优的一个特征来切分节点。但是决策树并没有考虑特征之间的相关性。分类决策如果可以通过包含几个特征的特征组来切分,效果可能更好。这种决策树叫做多变量决策树,在特征选择时,选择最优的一个特征线性组合来做分类决策。
2. 随机森林
虽然可以剪枝,但是决策树还是容易出现过拟合情况,且决策树对噪音敏感。这时我们可以通过集成学习算法——随机森林进行优化。
七、参考资料
周志华——《机器学习》
李航——《统计学习方法》