【机器学习-周志华】阅读笔记-第四章

第四章-决策树

基本思路:

主要用于分类任务,其通过“分而治之”的思想,完成基于一个一个属性的分类,最终确定样例所属类别。

输入:训练集D={(x1,y1),(x2,y2),...,(xm,ym)};
      属性集A={a1,a2,...,ad}
过程:函数Generate(D,A)

生成节点node
if D 中样本全属于同一类别 C then
    将node标记为C类叶结点;return
end if
if A = 空集 OR D中样本在A上的取值相同then
    将node标记为叶结点,其类别标记为D中样本数最多的类;return
end if

从A中选择最优划分属性a*

for a* 的每一个值 an do:
    为node生成一个分支,令Dn表示D中在a*上取值为an的样本子集
    if Dn 为空 then
        将分支节点标记为叶结点,其类别标记为D中样本最多的类,return
    else 
        以TreeGenerate(Dn,A\{an})为分支节点 //递归
    end if
end for

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

共有三种情况使得递归返回:

(1)当前样本包含的样本全部属于同一个类别,不用划分

(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分

(3)当前节点包含的样本集合为空,不能划分

其中,我们可以发现,有一个关键过程,就是从A中选择最优划分属性,下面来谈谈如何进行最优划分属性选择

当我们进行划分时,总是希望能够在划分之后,各个子集能够尽可能的属于同一类别,即结点的“纯度”越来越高。由此一来,引入“信息熵”的概念。假定当前样本集合D中第k类样本所占的比例为{p}_{k}(k=1,2,...,|y|),D的信息熵定义为:

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

信息熵反应了样本集合纯度,即这一类别下,有多少正例,多少反例,他们的数目是否相近。数目越相近,样本集合纯度越高。

再引入“信息增益”的概念,反应了这一分类下,各个子集中有多少正例,多少反例,他们的数目是否相近。其计算方法为:

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

信息增益可以直观地反应当前分类是否能够有效地“分而治之”。

实际上,“信息增益”对可取值数目较多的属性有所偏向,即可取值数目较多的类别,能够计算出较大的信息增益。

此时可引入“增益率”概念,来选择最优划分属性。其定义为:

\begin{aligned} &\text { Gain ratio }(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}\\ &\Pi(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} \end{aligned}

其在原有的信息增益基础上,增加了数目,即可取值的数目越多(V越大),IV(a)的值也会越大,如此即可减少该类别下取值多带来的负面影响。需要注意的是,增益率对可取值数目较少的属性有所偏好。

除此之外,CART决策树使用“基尼指数”来判断数据集纯度,定义如下:

\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}

基尼指数越小,数据集D的纯度越高。他反应了从数据集D中随机抽取两个样本,其类别标记不一致的概率。

在生成决策树时,会产生“过拟合”的现象,因此,有“剪枝”操作。分为预剪枝和后剪枝。

预剪枝,是指在决策树生成过程中,对每个节点划分前,先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶子节点。判断方式为:使用验证集,对划分前后的精度进行计算。预剪枝在减小计算开销时,带来了欠拟合的风险。

后剪枝,是在生成完整决策树之后,从叶子节点开始,逐一进行验证集精度比较,在划分后若验证集精度下降,则进行“剪枝”。其欠拟合的风险很小,泛化性能往往优于预剪枝决策树,但是其训练时间开销要大得多。

连续与缺失值

之前讨论的是离散值,在面对类别下取值为连续值时,不能直接根据连续属性的可取值来对结点进行划分。此时,需要借助划分点 t 对样本集D进行划分。如何确定划分点呢?我们取各个相邻取值的中点,作为候选点。

信息增益公式稍加改造:

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

\begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in T_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}} \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned}

这样,我们就能够根据各个点的选取信息增益的大小进行划分点 t 的选择

对于缺失值,我们需解决两个问题:

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

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

问题一:我们可以通过修改信息增量的定义式,来解决这个问题。

我们通过如下公式,为每个样本附加一个权重

p表示无缺失值样本所占的比例

\tilde{p}_{k}表示无缺失值样本中,第k类所占的比例

\tilde{r}_{v}表示无缺失值样本中在属性a上取值{a}_{v}的样本所占的比例

\begin{aligned} \rho &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}} \\ \tilde{p}_{k} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant k \leqslant|\mathcal{Y}|) \\ \tilde{r}_{v} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant v \leqslant V) \end{aligned}

下式为修改后的信息增量定义式,其内涵为:为每一个属性添加一个比例,这样既考虑了所有的样本,又考虑了缺失值的存在。

$\begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned}$ \\ $$ \operatorname{Ent}(\tilde{D})=-\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k} \log _{2} \tilde{p}_{k} $$

问题二:

若样本x在划分属性a上的取值已知,则将其划入与其取值对应的子节点,且样本权值在子节点汇总保持为{w}_{x}

若样本x在划分属性a上的取值未知,则将其同时划入所有子节点,且样本权值在与属性值{a}_{v}对应的子节点中调整为\tilde{r}_{v}\cdot{w}_{x}

内涵:让同一个样本以不同的概率划入到不同的子节点中去

 

多变量决策树

上面讨论的决策树分类任务在图像上表示,都是以坐标轴为分界线,对样例进行分类,而实际过程中,可以设立多项式,训练多变量决策树,最终得到较好的分类效果。

如下,学得多变量决策树

对应的分类边界为:

其方法为:非叶结点对应的不再是某一个属性,而是对属性的线性组合进行测试。形如:

$\sum_{i=1}^{d} w_{i} a_{i}=t$

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值