决策树 — Decision Tree

决策树是一种分类算法。我们将通过一个经典的例子逐步了解决策树。假设我们要根据天气状况决策是否进行羽毛球训练,且有14天的历史数据供我们建立模型。如下:

Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No

决策树,顾名思义,就是要构建出一棵树状模型,将训练集中的不同类数据分隔开,尽可能地让叶子节点包含”纯“的同类数据。内点(非叶子节点)是特征项,分支是父节点特征不同的取值,树叶(叶子节点)是分类结果。自此,迎来了构建决策树过程中的第一个问题,根节点如何选择?经典的ID3算法引入了概念——熵,并用信息增益的大小作为选择根节点的标准。

定义一:

熵,用以描述某一集合、状态的不确定性。集合中的样本越统一,熵值越小;样本越随机,熵值越大。状态越稳定,熵值越小,反之熵值越大。公式如下:

Entropy(S)i=1cpilog2pi

其中, pi 表示某集合中类别 i 所占比列,或者是某状态现象 i 出现的概率。定义 0log0=0

以文章开头的决策是否进行羽毛球训练为例。当历史数据中 PlayTennis 全为 Yes No 时,熵值为 0 ;当 PlayTennis 一半为 Yes ,一半为 No 时,熵值为 1 ;其余情况,熵值在 0 1 之间。如下图:


这里写图片描述

历史数据中的熵值为:

Entropy([9+,5])=(9/14)log2(9/14)(5/14)log2(5/14)=0.940

定义二:

集合 S 在特征 A 下的信息增益定义为集合 S 通过特征 A 分支演变成集合 Sv 的熵值减小(即集合 S 中的样本由随机变得统一)。公式如下:

Gain(S,A)Entropy(S)vValues(A)|Sv||S|Entropy(Sv)

以文章开头的决策是否进行羽毛球训练为例。历史数据在特征 Wind 下的信息增益计算如下:

Values(Wind)=Weak,StrongS=[9+,5]SWeak[6+,2]SStrong[3+,3]Gain(S,Wind)=Entropy(S)v[Weak,Strong]|Sv||S|Entropy(Sv)=Entropy(S)(8/14)Entropy(SWeak)(6/14)Entropy(SStrong)=0.940(8/14)0.811(6/14)1.00=0.048

ID3算法通过计算每个特征的信息增益,选择信息增益最大(分类效果最好)的特征作为当前树的节点。构建过树节点的特征将不再加入到信息增益的计算中。以文章开头的决策是否进行羽毛球训练为例,构建决策树模型的根节点。先计算每个特征的信息增益:

Gain(S,Outlook)=0.246Gain(S,Humidity)=0.151Gain(S,Wind)=0.048Gain(S,Temperature)=0.029

计算得知,特征 Outlook 的信息增益最大,选其作为根节点。如下:


这里写图片描述

继续计算集合 SSunny 在剩余特征下的信息增益:

Gain(SSunny,Humidity)=0.970Gain(SSunny,Temperature)=0.570Gain(SSunny,Wind)=0.019

选择信息增益最大的 Humidity 作为 SSunny 的特征节点。如下:


这里写图片描述

如此重复,最后此例完整的决策树如下:


这里写图片描述

细心的读者会发现,尽管特征 Day 的信息增益最大, Gain(S,Day)=0.940 ,它并没有被用来当作根节点。因为特征 Day 会导致生成的决策树模型过拟合。然而,用信息增益的方式却无法识别、并避免这种情况。因此,引入信息增益率来选择特征节点。

定义三:

信息增益率,通过引入split information项来抵消过大的信息增益。split information公式如下:

SplitInformation(S,A)i=1c|Si||S|log2|Si||S|

信息增益率公式如下:
GainRatio(S,A)Gain(S,A)SplitInformation(S,A)

以羽毛球训练为例, GainRatio(S,Day)=0.9403.807=0.247 GainRatio(S,Outlook)=0.2461.577=0.156 GainRatio(S,Humidity)=0.1511.0=0.151 。通过计算可以发现,尽管没能避免特征 Day 被选作根节点,但是有效地降低了特征 Day 的影响。本例中 Day 是一个十分极端的个例,在实际应用中信息增益率比信息增益能更好地挑选特征节点。

除此之外,决策树的规模过大也会导致树模型过拟合。到一定程度,树模型的分类准确率会随着树规模的增大而递减。因此,决策树的建立需要受剪枝策略的限制。剪枝策略分为前剪枝和后剪枝:
* 前剪枝:限制树的深度,或者规定叶子节点的最小样本数。(实施难度较小,但是很难提前预知树模型的最佳规模)
* 后剪枝:先构建出一棵完整的决策树,再根据剪枝不影响树模型分类准确率的前提,对树进行剪枝。(理论上效果比前剪枝好,但是实施难度较大)

最后,除了可以通过信息增益和信息增益率来选择特征节点外,还可以基于某特征获取成本的考虑来选择特征节点。这是基于实际的考虑,例如:病人病症的分类预测。某些检查可能十分昂贵,因此,需要尽可能地利用普通检查的结果来做分类。此种考虑常用的计算公式如下:

Gain2(S,A)Cost(A)

或者:
2Gain(S,A)1(Cost(A)+1)w

其中, w[0,1] 是一个常量,用以权衡成本和信息增益之间的重要性。

补充

除了将决策树应用于分类问题之外,还可以将其输出作为其它机器学习算法的输入,这个思想很重要!!!

构建一个大的决策树容易导致树模型过拟合。因此,我们可以基于特征的若干子集构建若干个小决策树,每个小决策树就像是它所处特征集里的“专家”。每个“专家”基于自己的知识给某条数据返回一个 {0,1} 标签。例如:如果我们有100个小决策树,那么就有100个布尔值。这些布尔值构成了一个100维的特征向量。这个特征向量可以作为其它学习算法的输入!

猜你喜欢

转载自blog.csdn.net/u012841922/article/details/78826001
今日推荐