机器学习(西瓜书)学习笔记4——决策树

一、基本流程

1、一棵决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根节点包含样本全集。从根结点到每个叶结点的路径对应了一个判定结果序列。

2、决策树的基本流程:

输入:训练集  D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, y_{m}\right)\right\};属性集  A=\left\{a_{1}, a_{2}, \ldots, a_{d}\right\}  

过程:函数TreeGenerate(D,A)

(1): 生成结点node;

(2): if D 中所有样本都属于同一类别 C 。 then 

(3):       将node标记为C类叶节点;return

(4): end if

(5): if A=\varnothing  OR   样本在A上取值相同 then

(6):       将node标记为叶结点,其类别标记为D中样本数最多的类;return 

(7): end if

(8): 从A中选择最优划分属性 a_{*}  ;

(9): for a_{*} 的每个值 a_{*}^{v} do

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

(11)       if D_{v}  为空 then

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

(13)      else

(14)          以TreeGenerate(D_{v} ,A\\left\{a_{*}\right\}) 为分支结点。

(15)      end if

(16) end for

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

 

决策树的生成是一个递归过程,在决策树基本算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(3)当前结点包含的样本集合为空,不能划分。

3、划分选择

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

3.1 信息增益

“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占比例为  p_{k}(k=1,2, \ldots,|\mathcal{Y}|)  ,则D的信息熵定义为:

                                                                         \operatorname{Ent}(D)=-\sum_{k=1}^{ | \mathcal{Y |}} p_{k} \log _{2} p_{k} 

信息熵的值越小,则D的纯度越高。

考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重 \left|D^{v}\right| /|D| ,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain)。

                                                                    \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)

一般情况下,信息增益越大,表示使用属性a进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择。

3.2 增益率

        实际上,信息增益对可取值较多的属性有所偏好,为减少这种偏好可能带来的影响,使用增益率(gain ratio)来选择最优划分属性。增益率定义为:

                                                             Gainratio(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}

其中

                                                                             \mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}

称为a的固有值(intrinsic value),属性a的可能取值数目越多(即V越大),则IV(a)的值越大。

3.3 基尼指数

CART决策树使用“基尼指数”(Gini index)来选择划分属性。数据集D的纯度可用基尼值来度量:

                                                                      \begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{ | \mathcal{Y |}} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned}

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

属性a的基尼指数定义为:

                                                       Gini index(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)

于是,在候选集合A中,选择使得划分后基尼指数最小的属性作为最优划分属性,即

 

                                                                            a_{*}=\underset{a \in A}{\arg \min } \text { Gini index }(D, a)

4.剪枝处理

        剪枝(pruning)是决策树算法应对“过拟合”的策略。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就会导致过拟合。

        决策树剪枝分为预剪枝和后剪枝。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分并将当前结点划分为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能提高泛化性能,则将该子树替换为叶结点。

5.连续与缺失值

5.1 连续值处理

以上的数据都是基于离散数据进行的讨论,接下行看看决策树对连续值如何处理:

连续值的取值是无限的,因此,不能直接根据连续属性的可取值来对结点进行划分。这里用到了连续数值离散化的思维方法。最简单的策略是利用二分法对连续属性进行处理。

给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为 \left\{a^{1}, a^{2}, \ldots, a^{n}\right\} 。基于划分点t可将D分为子集 D_{t}^{-} 和 D_{t}^{+} ,其中 D_{t}^{-} 包含那些在属性a上取值 \leq t 的样本。而  D_{t}^{+} 包含那些在属性a上取值  > t 的样本。对相邻的属性取值 a^{i} 和 a^{i+1} ,t在区间 \left[a^{i}, a^{i+1}\right) 中取任何值所产生的划分结果相同。因此,对连续属性a,我们可考察包含n-1个元素的候选划分点集合:

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值