机器学习笔记——决策树

一、基本流程

决策树也叫判定树,它是基于树的结构来进行决策的,例如在西瓜问题上,决策过程中提出的每个判定问题都是对某个属性进行‘测试’,例如,’色泽=?’,‘根蒂=?’,每个测试的结果要么导出最终结论,要么导出进一步判定的问题。举例如下:


决策树学习的目的就是为了产生一颗泛化能力强的决策树,基本流程遵循简单而且直观的‘分而治之’策略。

二、决策树学习基本算法

输入:训练集D={(x1,y1),(x2,y2),...(xm,ym)},属性集A={a1,a2,...ad}。

先生成结点node,

再判断:    1、训练集全体是否属于同一类C,这时候就不用划分啦,直接将node标记为叶子结点,类标记为C;

                 2、属性集A是不是为空,或者训练集在属性集A上的取值相同(比如所有样本的根蒂都是蜷缩或敲声都是浊响,这就没有办法划分啦),这时候将node标记为叶子结点,类标记是D中样本数最多的类;

                 3、如果以上都不符合,那么从A中选出一个最优属性a*(具体怎么选看后面),这个a*会有多个取值(比如属性色泽就会有‘青绿’,‘乌黑’,‘浅白’几种取值)继而生成多个分支,并且令Dv表示每个分支上的样本数,这时候又要判断,如果某个Dv为空,那么就把这个分支标为叶子结点,类别标记就是它的父结点中所含样本数最多的类,如果不为空,就要继续在(A\a*)这剩余的属性集里面选取最优属性对Dv训练子集进行划分。

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

三、如何选择最优属性

我们希望的是在不断地划分之后,决策树分支上包含的样本点尽可能属于同一类,也就是结点纯度尽量高。下面会介绍几个关键术语:

    信息熵:是一种度量样本集合纯度的最常用指标,假设现在有集合D,其中第k类样本占了pk的比例(k=1,2,...|y|),那么D的信息熵为:

它是表示数据集的混乱程度,越大越混乱,因此我们需要它越小越好,D的纯度越高。

    信息增益:假设对训练集D用属性a进行划分,划分成V个分支(因为a有V个取值),每个分支上的样本数为Dv,这里给每个分支赋予权重|Dv|/|D|,表示样本数越多的分支结点影响越大。那么属性a对于训练集D的信息增益为:


一般而言,信息增益越大,表示用属性a来进行划分得到的纯度提升越大。

    增益率:著名的ID3算法就是以信息增益为准则来选择划分属性的。但是在划分中有个缺点就是对可取值数目较多的属性有所偏好,比如在西瓜集2.0的例子中,如果选择‘编号’作为候选属性计算对训练集D的信息增益,会发现很大很大,因为每个编号仅包含一个样本,分支结点纯度已达到最大,这对划分是没有意义的。为此C4.5算法中使用增益率(gain ratio)来选择最优属性,


这里IV(a)可以和之前Ent(D)结合起来理解,一个是把D用a划分成V类,一个是把D用k划分成K类,然后求信息熵,只不过这里IV(a)称作属性a的‘固有值’。

注意信息增益率对可取值数目较少的属性有所偏好,因为,可取值数目较少,则V小,IV(a)的值通常会越小(类比信息熵越小,纯度越高,这是我们所希望的)。所以C4.5采取一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

    基尼指数:CART决策树是一种分类与回归树,使用基尼指数来选择划分属性,数据集的纯度可以用基尼值度量:


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

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


对每个子集Dv(分支)有权重|Dv|/|D|,再乘上这个子集的基尼值。我们选择那个使得划分后基尼指数最小的属性作为最优划分属性,即


四、剪枝处理

剪枝是决策树算法对付‘过拟合’的主要手段,分为‘预剪枝’和‘后剪枝’。

‘预剪枝’是在决策树生成过程中,对当前结点进行估计,如果对该结点划分能带来决策树泛化性能提升就划分,否则停止划分把该结点标记为叶子结点;‘后剪枝’是在决策树生成之后从下到上对非叶子结点进行考察,如果将该结点对应的子树替换为叶子结点能带来决策树泛化性能提升,则将该子树替换为叶子结点。

如何判断决策树泛化性能的提升?可以采用留出法,预留一部分作为‘验证集’进行性能评估,‘预剪枝’中计算划分前后验证集的精度,如果划分后的精度大于之前,则划分,小于等于禁止划分。‘后剪枝’中计算剪枝前后的验证集精度,如果提高则剪枝。

‘预剪枝’基于‘贪心’本质禁止很多分支展开,有‘欠拟合’的风险,但是降低了‘过拟合’的风险,并且降低了训练时间开销和测试时间开销。‘后剪枝’通常比预剪枝决策树保留更多的分支,因此欠拟合风险很小,泛化性能往往优于预剪枝决策树,但是其训练时间开销和测试时间开销要比未剪枝决策树和预剪枝决策树大得多。

五、连续与缺失值

属性值如果是连续的,采用连续属性离散化技术——二分法。比如有连续属性a有n个取值,从小到大排序为{a1,a2,...an}。基于划分点 t 将 D 分为子集 Dt- 和 Dt+,前者包含在属性a上取值不大于t的样本,后者包含在属性a上取值大于t的样本。 对于相邻的属性值ai和a(i+1),在这两者之间取任何值所产生的划分结果一样,因此共有n-1和候选划分点,


这样就可以算每个划分点t对数据集D的信息增益,

选择使得Gain(D,a)最大的划分点。

注意:这里与离散属性不同,如果当前结点划分属性为连续属性,那么该属性还可以作为后代结点的划分属性,而离散属性是不可以的。

再说一下缺失值的处理,需要解决两个问题1)如何在属性值缺失的情况下选择划分属性?2)给定划分属性,如果样本在该属性上的值缺失,如何对样本进行划分?

假设有训练集D和属性a,D~表示D中在属性a上没有缺失值的样本集合(有效样本集合),属性a有V个取值{a1,a2,.....av},每个取值的样本数为D~v, D~k表示D~中第k类样本子集,为每个样本x赋予一个权重wx(初始化为1), 因此有



p(rho)表示无缺失值样本所占的比例,pk~表示无缺失值样本中第k类样本所占的比例,rv~表示无缺失值样本中在属性a上取值av的样本所占的比例

所以针对问题一解决方案:


针对问题二解决方案:

如果样本x在属性a上取值已知,则把x划分到与其取值对应的子结点,并且样本权值在子结点中保持为wx; 如果样本x在属性a上取值未知,则将x同时划分到所有子结点,并且样本权值在与属性值av对应的子结点中调整为rv~乘以wx,也就是说让同一个样本以不同的概率划入到不同的子结点中去。

六、多变量决策树

也叫‘斜决策树’,非叶子结点不再是针对单个属性,而是对属性的线性组合进行测试,也就是说每个非叶子结点都是一个形如的线性分类器,wi和t可以在该结点所含的样本集和属性集上学得。


以上就是读完周志华《机器学习》——决策树这章之后的基本知识的归纳,后面开始代码实现这个算法。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值