Machine Learning笔记整理 ------ (五)决策树、随机森林

1. 决策树

一般的,一棵决策树包含一个根结点、若干内部结点和若干叶子结点,叶子节点对应决策结果,其他每个结点对应一个属性测试,每个结点包含的样本集合根据属性测试结果被划分到子结点中,而根结点包含样本全集,从根结点到每个叶子结点的路径对应了一个判定测试序列。其基本流程如下所示:

输入:训练集D={(x1,y1), (x2, y2), ......, (xm, ym)}
     属性集A={a1, a2, ......, ad}
过程:函数TreeGenerate(D, A),传入参数为训练集D与属性集A
1:  生成结点node;                                  
2:  if D中样本全部属于同一类别C then                         
3:     将node标记为C类叶子结点;return                       
4:  end if
5:  if A=∅ OR D中样本在A上的取值相同 then
6:     将node标记为叶子结点,其类别标记为D中样本数量最多的类;return
7:  end if
8:  从A中选择最优划分属性a*;
9:  for a*的每一个值av* do
10:   为node生成一个分支;令Dv表示D在a*上取值为av*的样本子集;
11:   if Dv为空 then
12:      将分支结点标记为叶子结点,其类别标记为D中样本最多的类;return
13:   else
14:      以TreeGenerate(Dv,A\{a*})为分支结点
15:   end if
16: end for

所以,决策树的生成是一个递归过程,在决策树基本算法中,有三种情形会导致递归,它们分别是:

  1. 当前结点包含的样本全部属于同一个类别,无需划分(1-3行)
  2. 当前属性集合为∅,或者所有样本在所有属性上的取值是相同的,无法划分(4-6行)
  3. 当前结点包含的样本集合为∅,无法划分(样本集合为∅当然无法划分)

综上所述,决策树算法的关键点在于第8行:选择最优划分属性a*。一般而言,我们希望达到的效果是随着划分的不断进行,结点的纯度(purity)越来越高

2. 划分选择

(1) 信息增益 (Information Gain)

信息熵(information entropy)是用于度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占的比例为pk(k=1, 2, ..., |y|),则D的信息熵定义为:

其中,y是分类的数量,即标签label的数量,也就是有多少个pk。Ent(D)的值越小,则D的纯度越高。

样本的某离散属性a有个V个可能的取值 {a1, a2, ......, av},使用属性a对数据集D进行划分,则可以产生V个分支结点,其中,第x个分支结点包含了D中所有在属性a上取值为ax的样本,记为Dx,即可根据 Ent(D) 计算出信息熵,再考虑到不同的分支结点包含的样本数量不同,为分支结点赋予权重|Dx|/|D|,即样本数量越多的分支结点影响越大,于是便可以计算出属性a对样本集D划分所获的的信息增益(information gain):

一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。因此,可以表示为:

ID3决策树算法(Quinlan,1986)就是使用信息增益为准则来选择划分属性。

E.g. 西瓜数据集2.0如下:

可以看到,整个数据集D包含的样本数量为17,其中8个正例(好瓜),9个反例(坏瓜),由于是二分类,标记Label的数量为2,故 |y|=2。

根节点包含所有样本,计算根节点的信息熵:

接下来需要计算出当前属性集合,即 A = {色泽,根蒂,敲声,纹理,脐部,触感} 中每个属性的信息增益。

以属性“色泽”为例,该属性有3个取值{青绿,乌黑,浅白},如果使用“色泽”属性对数据集D进行划分,则可以得到3个子集,也就是对应的在决策树上有3个分支,分别记为:D1(青绿),D2(乌黑),D3(浅白),如下所示:

故可以计算出每一个属性值对应的信息熵:

最后可以计算出属性“色泽”的信息增益为:

类似的,重复上述步骤,可以计算出其他属性的信息增益:

可以看到,如果使用属性“纹理”作为划分结点,我们获得的信息增益是最大的,所以选择“纹理”作为当前结点的划分属性。

选择划分结点的步骤总结:

  1. 计算根节点的信息熵
  2. 对于属性集合中的每个属性,分别计算它们的信息增益
    1. 根据该属性的取值,将数据集划分为属性值对应的子集,故子集的数量应该与该属性的取值数量一致
    2. 计算出每个属性值对应的信息熵
    3. 计算出该属性的信息增益
  3. 在获得所有属性的信息增益后,找到信息增益最大的属性,即为当前结点的划分属性

接下来剩余的结点的进一步划分,则先要找到当前结点样本中可用的属性集合,再重复之前的步骤分别计算出每个属性对应的信息增益,取最大者为下游结点的划分属性。

(2) 增益率 (Gain ratio)

信息增益准则对取值数目较多的属性有所偏好,为了减轻这种影响,可以使用增益率来选择最优划分属性,信息增益率的定义为:

其中,IV(a) 称为属性a的固有值 (Quinlan, 1993),其意义在于:属性a的可能取值数目越多(即V越大),IV(a)的值通常会越大,定义如下:

对于上面的西瓜数据集2.0,固有值如下:

IV(触感) = 0.874  V=2

IV(色泽) = 1.580  V=3

IV(编号) = 4.088  V=17

需要注意的是,增益率准则对于可取值数目较少的属性有所偏好,所以,著名的C4.5决策树算法(Quinlan, 1993)并不直接使用增益率最大者作为划分属性,而是先从候选划分属性中找到信息增益高于平均水平的增益,再从中选择增益率最高者。

(3) 基尼指数

CART决策树算法使用基尼指数来选择划分属性,数据集D的纯度可以用基尼指数来进行衡量:

直观来说,Gini(D) 反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此,Gini(D) 越小,则数据集D的纯度越高。

另一方面,属性a的基尼指数定义为:

所以,在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优化分属性,即:

3. 剪枝处理

剪枝(Pruning)是决策树算法处理过拟合的主要手段,在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会导致决策树分支过多,因此可以通过主动去掉一些分支来降低过拟合的风险。剪枝的基本策略分为预剪枝(Prepruning)和后剪枝(Post-pruning)。

(1) 预剪枝(Prepruning)

(2) 后剪枝(Post-pruning)

猜你喜欢

转载自www.cnblogs.com/khbk/p/10033334.html
今日推荐