决策树的学习过程通常包括3个步骤:1.特征选择 2.决策树生成 3.决策树剪枝
决策树生成算法:
- 构建根结点:将所有训练数据放在根结点。
选择一个最优特征,根据这个特征将训练数据分割成子集,使得各个子集有一个在当前条件下最好的分类。
若这些子集已能够被基本正确分类,则将该子集构成叶结点。 若某个子集不能够被基本正确分类,则对该子集选择新的最优的特征,继续对该子集进行分割,构建相应的结点。
- 如此递归下去,直至所有训练数据子集都被基本正确分类,或者没有合适的特征为止。
决策树剪枝算法
上述生成的决策树可能对训练数据有很好的分类能力,但是对于未知的测试数据却未必有很好要的分类能力,即可能发生过拟合的现象。
- 解决的方法是:对生成的决策树进行剪枝,从而使得决策树具有更好的泛化能力。
- 剪枝是去掉过于细分的叶结点,使得该叶结点中的子集回退到父结点或更高层次的结点并让其成为叶结点
决策树的生成对应着模型的局部最优,决策树的剪枝则考虑全局最优。
特征选择
本文主要介绍信息增益(ID3)特征选择方法和信息增益比(C4.5)特征选择方法
首先引入熵的概念。熵(Entropy)最初是一个物理学概念,后来在数学中用来描述“一个系统的混乱程度”,因此一个系统的信息熵越高就越无序,信息熵越低就越有序,信息熵越高,使其有序所要消耗的信息量就越大。
假设变量$$X=\left\{x_{1}, x_{2} \ldots x_{i} \ldots x_{n}\right\}$$
其中每个元素对应的概率(比例)为
$$ P=\left\{p_{1}, p_{2} \ldots p_{i} \ldots p_{n}\right\} $$
则对应熵的计算公式如下:
$$ E(X)=-\sum_{i=1}^{n} p_{i} \log _{2}\left(p_{i}\right) $$
1.信息增益
特征A对训练数据集S的信息增益(Info-Gain)定义为:集合S的经验熵E(S)于关于特征A经验条件熵E(A)之差:
$$ I \operatorname{Gain}(S, A)=E(S)-E(A) $$
$$ E(A)=\sum_{v \in \text { value }(A)} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} E\left(S_{v}\right) $$
例子:
在这个例子中,最后一列指是否出去玩,这里作为我们所要预测的标记值(label),而前四列就是我们需要借助的数据,每一列都是一个特征(feature)。
初始状态下,label列总共为14行,有9个yes和5个no,所以label列初始信息熵为:
$$ E(S)=-\frac{9}{14} \log _{2}\left(\frac{9}{14}\right)-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right) $$
假设我们先划分outlook这一列,分成sunny、rain、overcast三类,数量分别为5:5:4,考虑到每个类别下对应的label不同,可以计算出划分后的信息熵:
$$ E(A)=\frac{5}{14} E\left(S_{1}\right)+\frac{5}{14} E\left(S_{2}\right)+\frac{4}{14} E\left(S_{3}\right) $$
其中E(S1)、E(S2)、E(S3)分别为每个类别下对应的label列的熵。
在ID3算法中,信息增益(Info-Gain)越大,划分越好,决策树算法本质上就是要找出每一列的最佳划分以及不同列划分的先后顺序及排布。
2.信息增益比
根据前文的例子,Info-Gain在面对类别较少的离散数据时效果较好,上例中的outlook、temperature等数据都是离散数据,而且每个类别都有一定数量的样本,这种情况下使用ID3与C4.5的区别并不大。但如果面对连续的数据(如体重、身高、年龄、距离等),或者每列数据没有明显的类别之分(最极端的例子的该列所有数据都独一无二),在这种情况下,我们分析信息增益(Info-Gain)的效果:
E(S)为初始label列的熵,并未发生变化,则IGain(S,A)的大小取决于E(A)的大小,E(A)越小,IGain(S,A)越大,而根据前文例子,若某一列数据没有重复,ID3算法倾向于把每个数据自成一类,此时E(A)=0, 这样E(A)为最小,IGain(S,A)最大,程序会倾向于选择这种划分,这样划分效果极差,特征A不具有任何的分类能力。
为了解决这个问题,引入了信息增益率(Gain-ratio)的概念,其定义为信息增益IGain(S,A)于关于特征A的熵Info的比值,计算方式如下:
$$ \text { Gain-ratio }=\frac{I \operatorname{Gain}(S, A)}{\operatorname{Info}} $$
$$ \text { Info }=-\sum_{v \in \text { value }(A)} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} \log _{2} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} $$
如上面的例子,对特征outlook的Info:
$$ \text{Info}=-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right)-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right)-\frac{4}{14} \log _{2}\left(\frac{4}{14}\right) $$
Info表征了特征A对训练集S的拆分能力。
信息增益比本质上是对信息增益乘以一个加权系数:
- 当特征A的取值集合较大时,加权系数较小,表示抑制该特征。
- 当特征A的取值集合较小时,加权系数较大,表示鼓励该特征。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。