【机器学习-西瓜书】第4章-决策树

结合李航老师《统计学习方法》,笔记参见【统计机器学习-李航】第5章 决策树

4.1 导入

【机器学习-西瓜书】第4章-决策树_第1张图片 一棵决策树包含一个根节点、若干个内部节点(对应于属性测试)和叶节点(对应于决策结果);

从根节点 到 每个叶节点的路径对应了一个 判定测试序列。决策树学习的目的是 产生一颗泛化能力强的决策树,基本流程遵循 简单且直观的“分而治之 (divide-and-conquer)” 策略。

输入:训练集 D=\left \{ \left ( x_{1}, y_{1}\right ),\left ( x_{2}, y_{2}\right ),...,\left ( x_{m}, y_{m}\right ) \right \};\\

        属性集 A=\left \{ a_{1}, a_{2},..., a_{d}\right \}

过程:

定义 函数TreeGenerate (D, A):

        生成节点node;

        if D中样本全部属于同一个类别C then

                将node标记为C类叶节点;return

        end if

        if A = \varnothing or D中样本在A上取值相同 then

                将node标记为 叶节点,其类别标记为D中样本数 最多的类;return

        end if

        从A中 选择最优划分属性a^{\ast } ;     # 这一步是十分关键,那么如何选择最优划分属性?参见4.2

        for a^{\ast } 的每一个取值 a_{\ast }^{v} do

                为node生成一个分支;令 D_{v} 表示D中 在a^{\ast }上取值为 a_{\ast }^{v} 的样本子集;

                if D_{v} 为空 then

                        将分支结点标记为叶节点,其类别标记为 D 中样本最多的类;return

                else

                        以 TreeGenerator (D_{v}, A \ {a^{\ast }}) 为分支结点

                end if

        end for

输出:以node为根结点的一棵决策树

决策树的生成过程是一个递归过程。过程中碰到以下三种情形,则进行递归:

  1. 当前结点包含的样本 全部属于同一类别,无需划分;
  2. 当前属性集为空,或 所有样本在所有属性上取值相同,无法划分;
  3. 当前结点包含的样本集合为空,不能划分

4.2 划分选择

我们希望 决策树的分支结点包含的样本尽可能属于同一个类别,即结点的纯度越高越好

4.2.1 信息增益

信息熵 (information entropy):度量样本集合纯度最常用的一种指标。

假定当前样本集合D中 第k类样本所占的比例为 p_{k}(k=1,2,...,|Y|), 则D的信息熵可定义为:

Ent(D) = - \sum_{k=1}^{|Y|}p_{k}log_{2}p_{k} , \ \ \ (4.1)

Ent(D) 值越小,则D的纯度越高。(Ent(D) 值小 -> pk取值愈接近1 -> 某类样本所占比愈大,接近100% -> 训练数据集的纯度愈高)

使用属性a 对样本D进行划分所获得的 “信息增益 (information gain)”如下:

Gain(D, a) = Ent(D) \ - \ \sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v}), \ \ \ (4.2)) \\ a = \{a^{1}, a^{2}, ..., a^{V}\}

当根据属性a 对 D进行划分,则产生V个分支结点,我们用 D^{v} 表示:第v个分支结点包含了 D中所有的属性值为 a^{v} 的样本子集,上式中 \frac{|D^{v}|}{|D|} 表示:分支结点权重,样本数量越多,该分支结点权重应该越大。

信息增益Gain (a, D)越大,意味着:使用属性a 来进行划分 所获得的 “纯度提升”越大

因此可以使用 信息增益来进行决策树的划分属性选择,即 

a^{\ast }= arg max_{a\in A} \ Gain(D, a)

一个例子理解:使用信息增益来选择划分属性

【机器学习-西瓜书】第4章-决策树_第2张图片

D=\{x_{1}, y_{1},x_{2}, y_{2}, ..., x_{17}, y_{17}\},\ \ x_{i} = \{x_{i1}, x_{i2}, ..., x_{i6}\}, \ \ \ y_{i}\in \left \{ 0, 1 \right \}\\ A = \{a_{1}, a_{2}, ...,a_{6}\}, \ \ a_{i} = \{a_{i1}, a_{i2}, ..., a_{iv}\}

  1.  计算信息熵Ent(D): 观察可得:|Y| = 2,正例占比p1= 8/17, 反例占比p0 = 9/17,因此有

Ent(D) = -\sum_{k=1}^{2}p_{k}log_{2}p_{k} = -(\frac{8}{17}log_{2}\frac{8}{17} + \frac{9}{17}log_{2}\frac{9}{17}) = 0.998

      2. 计算所有属性的信息增益,具体计算过程举 色泽为例:

根据色泽属性 = {青绿,乌黑,浅白},将数据集D分为 D1, D2, D3三个分支结点,分别计算3个分支结点的信息熵为

Ent(D^{1}) = -(\frac{3}{6}log_{2}\frac{3}{6} + \frac{3}{6}log_{2}\frac{3}{6}) = 1.000,\\ Ent(D^{2}) = -(\frac{4}{6}log_{2}\frac{4}{6} + \frac{2}{6}log_{2}\frac{2}{6}) = 0.918,\\ Ent(D^{3}) = -(\frac{1}{5}log_{2}\frac{1}{5} + \frac{4}{5}log_{2}\frac{4}{5}) = 0.722

计算出“色泽属性”的信息增益为

【机器学习-西瓜书】第4章-决策树_第3张图片

依次计算其他5个属性的信息增益

【机器学习-西瓜书】第4章-决策树_第4张图片

 由于 属性===纹理的 信息增益最大,因此,它被选为划分属性,得到如下图:

【机器学习-西瓜书】第4章-决策树_第5张图片

 得到上图后,再对每一个分支结点,即纹理==清晰,纹理==稍糊, 纹理==模糊再次进行划分。具体地,先看纹理==清晰,即样例集合D1的情况:

包含9个样例,属性集合为{色泽,根蒂,敲声,脐部,触感},5个属性。

首先计算信息熵:

Ent(D_{1})= -(\frac{7}{9}log_{2}\frac{7}{9} \ + \ \frac{2}{9}log_{2}\frac{2}{9}) =0.764

然后,计算该9个样例的 所有属性的信息增益,以色泽为例:

根据色泽属性 = {青绿,乌黑,浅白},将数据集 D_{1}分为 D_{11}, D_{12}, D_{13}三个分支结点,分别计算3个分支结点的信息熵为

Ent(D_{11}) = -(\frac{3}{4}log_{2}\frac{3}{4} + \frac{1}{4}log_{2}\frac{1}{4}) =0.811 ,\\ Ent(D_{12}) = -(\frac{3}{4}log_{2}\frac{3}{4} + \frac{1}{4}log_{2}\frac{1}{4})= 0.811\\ Ent(D_{13}) = -(\frac{1}{1}log_{2}\frac{1}{1} + 0)=0

计算出“色泽属性”的信息增益为

【机器学习-西瓜书】第4章-决策树_第6张图片

如此,依次计算出 其他属性的信息增益为:

【机器学习-西瓜书】第4章-决策树_第7张图片

 由于 根蒂,脐部,触感的信息增益并列最大, 可任意选择其中之一作为划分属性,并再次进行分支结点划分(如选择根蒂,则根据根蒂==蜷缩,根蒂==稍蜷,根蒂==硬挺 划分子结点),得到最终的决策树如下:

【机器学习-西瓜书】第4章-决策树_第8张图片

4.2.2 增益率 :C4.5决策树算法

使用信息增益准则来 选择划分属性的缺点:对可取值数目较多的属性有偏好,这会带来不利影响。比如若将上述数据集D中的编号也作为候选划分属性,则可计算出 其信息增益为 0.998,但显然这不是一颗好的决策树,因为它无法对新样本进行预测。

改进对策:使用“增益率 (gain ratio)”来选择最优划分属性。增益率表示为:

Gain\_ratio(D, a)=\frac{Gain(D, a)}{IV(a)}, \\ IV(a) = - \sum_{v=1}^{V}\frac{|D_{v}|}{|D|}log_{2}\frac{|D_{v}|}{|D|}

IV(a)称为 属性a的“固有值 (intrinstic value)”。属性a的可能取值数目越多,则IV(a)的值通常也越大。相应地,增益率则会变小,表明了 对取值数目很多的属性的 信息增益的惩罚。

增益率的偏好:对可取值数目较少的属性有偏好。

4.2.3 基尼指数 (Gini index):CART决策树

使用基尼值来衡量 数据集D的纯度:

【机器学习-西瓜书】第4章-决策树_第9张图片

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

属性 a 的基尼指数为:

Gini\_index(D, a) = \sum_{v=1}^{V}\frac{|D_{v}|}{|D|}Gini(D_{v}),\\ a^{\ast } = arg \ min_{a\in A}\ Gini\_index(D,a)

4.3 剪枝处理 (pruning)

剪枝 (pruning)是 决策树学习算法解决“过拟合”问题的主要手段。其基本策略有:预剪枝 (prepruning) 和 后剪枝 (post-pruning).

数据集如下:

【机器学习-西瓜书】第4章-决策树_第10张图片

未剪枝决策树:

 【机器学习-西瓜书】第4章-决策树_第11张图片

4.3.1 预剪枝

生成决策树过程中,对每个结点在划分前进行估计,若 当前结点的划分不能带来性能提升,则停止划分并将当前结点 作为叶节点。

选择 脐部 对训练集进行划分,产生3个分支,如下图所示:

【机器学习-西瓜书】第4章-决策树_第12张图片

4.3.2 后剪枝

先从训练集生成一棵完成决策树 

【机器学习-西瓜书】第4章-决策树_第13张图片

4.4 连续与缺失值

4.4.1 连续值处理

不能直接根据连续属性的可取值来对结点进行划分,可采用二分法 (bi-partition)对连续属性取值进行处理:

对于相邻的属性取值 a^{i} 和 a^{i+1} 来说,t 在区间[a^{i} , a^{i+1})中 取任意值所产生的划分结果相同。则包含n-1个元素的 候选划分点集合为

T_{a} = \{\frac{a^{i}+a^{i+1}}{2} | 1\leqslant i \leqslant n-1\}

 如此,便可以像离散属性值一样来考察这些划分点,选择最优的 划分点进行样本集合的划分。

4.4.2 缺失值处理

样本的某些属性值缺失,导致样本不完整,但如果放弃这些信息不完整的样本,将造成数据信息的浪费。

需要解决两个问题:

1)如何在属性值缺失的情况下,选择划分属性?

2)给定划分属性,若样本在该属性上的值已经缺失,该如何对样本进行划分?

4.5 多变量决策树

你可能感兴趣的:(机器学习)