决策树是一种分类算法。我们将通过一个经典的例子逐步了解决策树。假设我们要根据天气状况决策是否进行羽毛球训练,且有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=1c−pilog2pi
其中,pi 表示某集合中类别i 所占比列,或者是某状态现象i 出现的概率。定义0log0=0 。
以文章开头的决策是否进行羽毛球训练为例。当历史数据中
历史数据中的熵值为:
定义二:
集合
S 在特征A 下的信息增益定义为集合S 通过特征A 分支演变成集合Sv 的熵值减小(即集合S 中的样本由随机变得统一)。公式如下:
Gain(S,A)≡Entropy(S)−∑v∈Values(A)|Sv||S|Entropy(Sv)
以文章开头的决策是否进行羽毛球训练为例。历史数据在特征
ID3算法通过计算每个特征的信息增益,选择信息增益最大(分类效果最好)的特征作为当前树的节点。构建过树节点的特征将不再加入到信息增益的计算中。以文章开头的决策是否进行羽毛球训练为例,构建决策树模型的根节点。先计算每个特征的信息增益:
计算得知,特征
继续计算集合
选择信息增益最大的
如此重复,最后此例完整的决策树如下:
细心的读者会发现,尽管特征
定义三:
信息增益率,通过引入split information项来抵消过大的信息增益。split information公式如下:
SplitInformation(S,A)≡−∑i=1c|Si||S|log2|Si||S|
信息增益率公式如下:
GainRatio(S,A)≡Gain(S,A)SplitInformation(S,A)
以羽毛球训练为例,
除此之外,决策树的规模过大也会导致树模型过拟合。到一定程度,树模型的分类准确率会随着树规模的增大而递减。因此,决策树的建立需要受剪枝策略的限制。剪枝策略分为前剪枝和后剪枝:
* 前剪枝:限制树的深度,或者规定叶子节点的最小样本数。(实施难度较小,但是很难提前预知树模型的最佳规模)
* 后剪枝:先构建出一棵完整的决策树,再根据剪枝不影响树模型分类准确率的前提,对树进行剪枝。(理论上效果比前剪枝好,但是实施难度较大)
最后,除了可以通过信息增益和信息增益率来选择特征节点外,还可以基于某特征获取成本的考虑来选择特征节点。这是基于实际的考虑,例如:病人病症的分类预测。某些检查可能十分昂贵,因此,需要尽可能地利用普通检查的结果来做分类。此种考虑常用的计算公式如下:
或者:
其中,
补充
除了将决策树应用于分类问题之外,还可以将其输出作为其它机器学习算法的输入,这个思想很重要!!!
构建一个大的决策树容易导致树模型过拟合。因此,我们可以基于特征的若干子集构建若干个小决策树,每个小决策树就像是它所处特征集里的“专家”。每个“专家”基于自己的知识给某条数据返回一个