【周志华机器学习】四、决策树

参考资料

  1. Machine-learning-learning-notes
  2. LeeML-Notes
  3. ML-NLP

本博客为作者根据周志华的西瓜书和参考资料1、2、3所做的笔记,主要用于学习,非技术类博客,因此存在大量复制粘贴,请见谅。

决策树代码实现示例见于github仓库

1. 基本概念

决策树是基于树结构来进行决策的。

例如:
在这里插入图片描述

决策树中决策过程的每一次判定都是对某一属性的“测试”,决策最终结论则对应最终的判定结果。一般一棵决策树包含:一个根节点、若干个内部节点和若干个叶子节点,易知:

  • 每个非叶节点表示一个特征属性测试。
  • 每个分支代表这个特征属性在某个值域上的输出。
  • 每个叶子节点存放一个类别。
  • 每个节点包含的样本集合通过属性测试被划分到子节点中,根节点包含样本全集。

2. 决策树的构造

决策树的构造是一个递归的过程,有三种情形会导致递归返回:

(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;

(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;

(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

算法的基本流程如下图所示:

2.png
可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。

属性划分的目标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别。因此下面便是介绍量化纯度的具体方法,决策树最常用的算法有三种:ID3,C4.5和CART

3. ID3算法(使用信息增益)

ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为 p k ( k = 1 , 2 , . . . , ∣ γ ∣ ) p_k(k=1,2,...,|\gamma|) pk(k=1,2,...,γ),则样本集合D的信息熵定义为:
3.png

假 定 离 散 属 性 a 有 V 个 可 能 的 取 值 a 1 , a 2 , . . . , a V {a^1,a^2,...,a^V} a1,a2,...,aV , 若 使 用 a 来 对 样 本 集 D进 行 划 分 , 则 会 产 生 V 个 分 支 结 点 , 其 中 第 v 个 分 支 结 点 包 含 了 D 中 所 有 在属 性 a 上 取 值 为 a v a^v av 的 样 本 , 记 为 D v D^v Dv. 易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。于 是 可 计 算 出 用 属 性 a 对 样 本 集 D 进 行 划 分 所 获 得 的 “ 信 息 增 益 “(information gain)

4.png

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

4. C4.5算法(使用增益率)

ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。

首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率,增益率定义为:

5.png称 为 属 性 a 的 “固有值” (intrinsic value)。属性a的可能取 值 数 目 越 多 ( 即 V 越 大 ), 则 IV(a) 的 值 通 常 会 越 大 .

5. CART算法(使用基尼系数)

CART(Classification And Regression Tree)决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,基尼指数定义如下:
6.png

进而,使用属性α划分后的基尼指数为:

7.png

于 是 , 我 们 在 候 选 属 性 集 合 A中 , 选 择 那 个 使 得 划 分 后 基 尼 指 数 最 小 的 属性 作 为 最 优 划 分 属 性 , 即 a ∗ = arg min ⁡ a ∈ A a^* = \argmin_{a\in A} a=aAargmin Gini_index(D, a)。

示例

假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,

当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下:

1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}

2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}

3.划分点: “硕士”,划分后的子集合 : {博士},{本科,硕士}}

对于上述的每一种划分,都可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度:
在这里插入图片描述

因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)

然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。到此就可以长成一棵“大树”了。

三种不同的决策树算法小结

  • ID3:取值多的属性,更容易使数据更纯,其信息增益更大。

    训练得到的是一棵庞大且深度浅的树:不合理。

  • C4.5:采用信息增益率替代信息增益。

  • CART:以基尼系数替代熵,最小化不纯度,而不是最大化信息增益

6. 剪枝处理

从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过的问题:过拟合(overfitting),即太依赖于训练样本。

剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以将数据集划分为训练集和测试集。

预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。

后剪枝则表示在构造好一颗完整的决策树后,自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶子结点能带来决策树泛化性能提升,则将该子树替换为叶结点,类别标记为其包含样本最多的类别。

在这里插入图片描述

在这里插入图片描述

预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险

在这里插入图片描述

在这里插入图片描述

而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升

7. 连续值与缺失值处理

7.1 连续值处理

对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法基本思想为:给定样本集D与连续属性a,二分法试图找到一个划分点t将样本集D在属性a上分为 ≤ t ≤t t > t >t t

  • 首先将a的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为a所有的取值数目)。

  • 计算每一个划分点划分集合D(即划分为两个分支)后的信息增益。

  • 选择最大信息增益的划分点作为最优划分点。

11.png

7.2 缺失值处理

现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解决两个问题:

(1)如何选择划分属性。

(2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。

在这里插入图片描述
12.png

注意,根节点中的权重初始化为1。

对于问题(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即:
13.png

在这里插入图片描述

在这里插入图片描述

对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在分支节点中的权重变为:

14.png

8. 后记

1. 树形结构为什么不需要归一化?

因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。

既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化。

对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。

2. 分类决策树和回归决策树的区别

Classification And Regression Tree(CART)是决策树的一种,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),两者在建树的过程稍有差异。

回归树

参考:https://blog.csdn.net/suipingsp/article/details/42264413

CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。

CART回归树实质上就是在该特征维度对样本空间进行划分,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:

在这里插入图片描述
因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:
在这里插入图片描述

所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHH3213

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值