写在前面:

本人初次发博,知识水平和文字功底有限,如有疏漏谬误之处请多包涵,欢迎指教和交流!

目录

1. 基本流程
2. 划分选择
3. 剪枝处理
4. 连续与缺失值
5. 多变量决策树
6. 补充(基于ISL)
7. 总结和思考

1.基本流程

决策树(decision tree)就是基于树结构进行决策的一种机器学习方法,进行决策时从根节点经过一系列判断从而得出最终决策。

从树结构来看,叶结点对应于决策结果,其余结点对应属性测试;根结点包含样本全集,从根结点到叶结点的路径对应了一个测试序列,路径上每个结点包含的样本集合满足某种属性测试结果。

决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单而直观的“分而治之“策略”。

决策树学习基本算法如下:

可以看到,有三种情形需要生成叶结点(不能继续划分):
(1)当前结点包含的样本全属于同一类别
(2)当前属性集为空(没有更多属性可以用来测试)或者所有样本在所有属性上取值相同
(3)当前结点包含的样本集合为空。

在第(2)种情形下,把结点标记为叶结点并将其类别设定为该节点所含样本最多的类别;在第(3)种情形下,把结点标记为叶结点并将其类别设定为父节点所含样本最多的类别。

2.划分选择

决策树的关键是如何选择最优划分属性,使得结点的纯度(purity)越来越高,即随着划分过程的不断进行,分支结点所包含的样本尽可能属于同一类别。

书中介绍了三种度量样本集合纯度的指标:信息增益,增益率和基尼指数。

2.1信息增益

首先引入了 信息熵(information entropy)的概念,这是衡量样本集合纯度最常用的一种指标,信息熵越小则纯度越高。
D为当前样本集合,有k类样本,pkp_{k}pk​表示第k类样本所占的比例,则D的信息熵为:

Ent(D)=−∑k=1∣y∣pklog2pkEnt(D)=-\sum_{k=1}^{|y|}p_{k}log_{2}p_{k}Ent(D)=−∑k=1∣y∣​pk​log2​pk​

假定离散属性a有V个可能的取值,若使用a来对样本集D进行划分,则会产生V个分支结点,第v个分支结点包含了D中所有在a上取值ava^{v}av的样本,记为Dv^{v}v。信息增益(information gain)定义为:

Gain(D,a)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv)Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})Gain(D,a)=Ent(D)−∑v=1V​∣D∣∣Dv∣​Ent(Dv)

其中 ∣Dv∣∣D∣\frac{|D^{v}|}{|D|}∣D∣∣Dv∣​为赋予给分支结点的权重,分支结点所含的样本数量越多影响越大。

信息增益越大,意味着用属性a来进行划分所获得的纯度提升越大。

2.2增益率

信息增益准则对可取值数目较多的属性有所偏好(分支越多纯度通常越高,获得的信息增益也越大,但泛化能力差),为了减少这种不利影响,引入了 增益率(gain ratio)的概念。增益率定义为:

Gain_ratio(D,a)=Gain(D,a)IV(a)\frac{Gain(D,a)}{IV(a)}IV(a)Gain(D,a)​

其中

IV(a)=−∑v=1V∣Dv∣∣D∣log2∣Dv∣∣D∣IV(a)=-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|}IV(a)=−∑v=1V​∣D∣∣Dv∣​log2​∣D∣∣Dv∣​

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

一般在选取最优划分属性时,会综合考虑信息增益和增益率:先从后选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

2.3基尼指数

基尼指数(Gini index)也可以用来衡量数据集D的纯度,定义如下:

Gini(D)=∑k=1∣y∣∑k′≠kpkpk′Gini(D)=\sum_{k=1}^{|y|}\sum_{ k^{'} \neq k}p_{k}p_{k'}Gini(D)=∑k=1∣y∣​∑k′̸​=k​pk​pk′​
=1−∑k=1∣y∣pk21-\sum_{k=1}^{|y|}p_{k}^{2}1−∑k=1∣y∣​pk2​

直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不同的概率。因此,Gini(D)越小,D的纯度越高。
属性a的基尼指数定义为:

Gini_index(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv)\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v})∑v=1V​∣D∣∣Dv∣​Gini(Dv)

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

3.剪枝处理

为了防止过拟合,需要对决策树进行剪枝处理,基本策略有预剪枝和后剪枝两种。

3.1预剪枝

预剪枝(prepruning)是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。

可以根据划分前后的验证集精度(样本被正确分类的比例)决定是否进行划分。预剪枝不仅降低了过拟合的风险,还减少了训练时间和测试时间;但另一方面,由于预剪枝是基于“贪心”本质,只会着眼当前最优的情况,不会考虑对当前表现提升不大而对后续表现有较大提升的划分,且预剪枝会有欠拟合的风险。

3.2后剪枝

后剪枝(post-pruning)是从训练集生成一棵完整的决策树,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上对所有非叶结点逐一考察,因此训练时间开销要比未剪枝决策树和预剪枝决策树要大得多。

4.连续与缺失值

4.1连续值处理

之前讨论的是基于离散属性生成决策树,现在讨论连续值(回归)问题。

最简单的策略就是把连续值进行离散化,采用 二分法(bi-partition)对连续属性进行处理,将样本集D分为两个子集Dt+D_{t}^{+}Dt+​和Dt−D_{t}^{-}Dt−​(以连续属性a为例,连续值以t为划分点,Dt+D_{t}^{+}Dt+​包含在属性a上大于t的样本,Dt−D_{t}^{-}Dt−​包含在属性a上不大于t的样本)。

一种划分方法是把D在a属性上出现n个不同取值的从小到大排列{a1,a2,a3……,ana^{1},a^{2},a^{3}……,a^{n}a1,a2,a3……,an},顺序选取每两个取值的中位点作为划分点,划分点集为Ta={ai+ai+12∣1≤i≤n−1}T_{a}=\left \{ \frac{a^{i}+a^{i+1}}{2}|1\leq i \leq n-1 \right \}Ta​={2ai+ai+1​∣1≤i≤n−1},对这n-1个划分点对应进行考察,选取最优的划分点。

Gain(D,a)=max⁡t∈TaGain(D,a,t)Gain(D,a)=\max_{t\in Ta}Gain(D,a,t)Gain(D,a)=maxt∈Ta​Gain(D,a,t)
=max⁡t∈TaEnt(D)−∑λ∈(−,+)∣Dtλ∣∣D∣Ent(Dtλ)\max_{t\in Ta}Ent(D)-\sum_{\lambda\in{(-,+)}}\frac{|D_{t}^{\lambda}|}{|D|}Ent(D_{t}^{\lambda})maxt∈Ta​Ent(D)−∑λ∈(−,+)​∣D∣∣Dtλ​∣​Ent(Dtλ​)

其中Gain(D,a,t)是样本集D基于划分点t二分后的信息增益。于是,我们就可选择使Gain(D,a,t)最大化的划分点。

将当前属性集中所有的属性和划分点对应的信息增益求出,就可以选择获得最大信息增益的属性及其划分点来划分当前结点。

需注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。

4.2缺失值处理

在数据集中某些样本的属性存在缺失时,需要解决两个问题:(1)如何进行划分属性选择(2)如何对缺失属性的样本在该属性上进行划分。

D∼D^{\sim }D∼表示D在a属性上没有缺失值的样本子集。对问题(1),我们可以根据D∼D^{\sim }D∼来判断属性a的优劣。假定属性a有V个可取值,令D∼vD^{\sim v}D∼v表示D∼D^{\sim }D∼在属性a上取值为ava^{v}av的样本子集,D∼kD^{\sim k}D∼k表示D∼D^{\sim }D∼中属于第k类的样本子集。显然D∼=∪k=1∣y∣D∼kD^{\sim }=\cup_{k=1}^{|y|}D^{\sim k}D∼=∪k=1∣y∣​D∼k,D∼=∪v=1VD∼vD^{\sim }=\cup_{v=1}^{V}D^{\sim v}D∼=∪v=1V​D∼v。

我们为每个样本x赋予一个权重ωx\omega_{x}ωx​,并定义

ρ=∑x∈D∼ωx∑x∈Dωx\rho=\frac{\sum_{x\in D^{\sim \omega_{x}}}}{\sum_{x\in D \omega_{x}}}ρ=∑x∈Dωx​​∑x∈D∼ωx​​​

ρk∼=∑x∈Dk∼ωx∑x∈D∼ωx(1≤k≤∣y∣)\rho k^{\sim}=\frac{\sum_{x\in Dk^{\sim \omega_{x}}}} {\sum_{x\in D^{\sim} \omega_{x}}}(1\leq k\leq |y|)ρk∼=∑x∈D∼ωx​​∑x∈Dk∼ωx​​​(1≤k≤∣y∣)

rv∼=∑x∈Dv∼ωx∑x∈D∼ωx(1≤v≤V)r v^{\sim}=\frac{\sum_{x\in Dv^{\sim \omega_{x}}}}{\sum_{x\in D^{\sim} \omega_{x}}}(1\leq v\leq V)rv∼=∑x∈D∼ωx​​∑x∈Dv∼ωx​​​(1≤v≤V)

ρ\rhoρ表示无缺失值样本所占的比例,ρk∼\rho k^{\sim}ρk∼表示无缺失值样本中第k类所占的比例,rv∼rv^{\sim}rv∼表示无缺失值样本中属性a上取值ava^{v}av的样本所占的比例。

基于上述定义,我们可将信息增益推广为:

Gain(D,a)=ρ∗Gain(D∼,a)Gain(D,a)=\rho *Gain(D^{\sim},a)Gain(D,a)=ρ∗Gain(D∼,a)
=ρ∗(Ent(D∼)−∑v=1Vrv∼Ent(Dv∼))\rho*(Ent(D^{\sim})-\sum_{v=1}^{V}rv^{\sim}Ent(Dv^{\sim}))ρ∗(Ent(D∼)−∑v=1V​rv∼Ent(Dv∼))

其中

Ent(D∼)=−∑k=1∣y∣pk∼log2pk∼Ent(D^{\sim})=-\sum_{k=1}^{|y|}pk^{\sim}log_{2}pk^{\sim}Ent(D∼)=−∑k=1∣y∣​pk∼log2​pk∼

对问题(2),若样本x在划分属性a上的取值已知,则将x划入对应子结点,且样本权值保持为ωx\omega_{x}ωx​。若样本x在划分属性a上的取值未知,则将x同时划入所有子结点,且对应子结点中的权值调整为rv∼∗ωxr v^{\sim}*\omega_{x}rv∼∗ωx​,即让同一个样本以不同的概率划入到不同的子结点中去。

5多变量决策树

把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在坐标空间中寻找分类边界,且分类边界均与坐标轴平行。

虽然轴平行的分类边界有很好的解释性,但在实际运用中,真实分类边界比较复杂时,必须使用很多段才能获得较好的近似,此时决策树会很复杂,预测时间开销会很大,故可以进行斜的边界划分,即在每个非叶结点对属性的线性组合进行测试而不是测试单个属性,多变量决策树(multivariate decision tree)就是这样为每个非叶结点建立一个合适的线性分类器。

6补充(基于ISL)

6.1回归树与分类树

西瓜书中,主要介绍了用决策树解决分类问题,对于连续值(回归)问题也是把它转换为分类问题再按分类问题的方式进行解决。与西瓜书不同,统计学习导论(An Introduction To Statistical Learning,ISL)中分别对两种问题及其对应方法进行了讨论,即把决策树分为了回归树和分类树。

6.1.1回归树

建立 回归树(regression tree)的过程可分为两步:
(1)将预测变量空间分割成J个互不重叠的区域 R1,R2,……,RJR_{1},R_{2},……,R_{J}R1​,R2​,……,RJ​
(2)对落入区域RjR_{j}Rj​的每个观测值作同样的预测,预测值为RjR_{j}Rj​上训练集的响应值的简单算术平均。

建立回归树的关键就是构建这J个区域,划分区域的目标是找到使模型的残差平方和RSS最小的矩形区域 R1,R2,……,RJR_{1},R_{2},……,R_{J}R1​,R2​,……,RJ​。
RSS的定义为:

∑j=1J∑i∈Rj(yi−yRj∼)2\sum_{j=1}^{J}\sum_{i\in R_{j}}(y_{i}-y^{\sim}_{R_{j}})^{2}∑j=1J​∑i∈Rj​​(yi​−yRj​∼​)2

yRj∼y^{\sim}_{R_{j}}yRj​∼​是第j个矩形区域中训练集的平均响应值。

结点划分的步骤与西瓜书中所介绍的类似,采用自上而下的贪婪算法(递归二叉分裂),每一步确定最佳的划分属性及划分点,只是衡量指标由信息增益变为了RSS。

剪枝处理则采取了 代价复杂性剪枝(cost complexity pruning)的方法,暂不展开。

6.1.2分类树

ISL中 分类树 (classification tree)与西瓜书中内容基本重合且不如西瓜书详细,不再赘述。

6.2多棵树综合(装袋法,随机森林,提升法)

装袋法,随机森林,提升法均以树为基本模块,建立更有效的预测模型。

6.2.1 装袋法

装袋法(bagging)就是运用自助法对决策树进行改进。

从原始训练集中有放回的重复抽取样本生成B个自助抽样训练集,并分别对这B个自助抽样训练集建立决策树求得预测值,最后将所有预测值的平均值作为原模型的预测。对于分类问题,采用多数投票的原则选择B个决策树中多数的类别作为总体预测。
袋装法可以有效减小方差,大幅提升预测准确性。

另外,值得一提的是一种无需特别使用交叉验证集就能直接估计装袋模型测试误差的方法——袋外误差估计。这种方法把原始训练集中那些没有装入自助抽样训练集的样本称为该自助抽样训练集的袋外样本,把所有袋外样本作为该自助抽样训练集的交叉验证集来使用。

6.2.2随机森林

随机森林是装袋法的改进,在建立决策树时,每考虑一个分支结点的划分,只从所有p个预测变量中随机选出一部分(如m个预测变量,m<p)来作为候选变量。通常m取√p,m=p时就是装袋法。
这样做可以防止所有的装袋法树看起来都很相似(每棵树都会选择带来最大改进的变量作为划分结点的选择),从而减小方差。

6.2.3提升法

提升法与装袋法相比,在树的生成即自助抽样训练集的生成有所不同,装袋法是根据原始数据集的某一修正版本,提升法的树都是顺序生成的:每棵树的构建都需要用到之前生成的树种的信息。

对回归树运用提升法:

提升法是一种舒缓的训练模型的方法,过程比其他方法更漫长,但往往有较好的预测效果。

提升法有三个调整参数:
(1)树的总数B,若B过大,提升法可能会出现过拟合,不过即使出现过拟合,其发展也很缓慢。我们用交叉验证来选择B。
(2)学习速度λ\lambdaλ。通常取0.01或0.001,视问题而定。若λ\lambdaλ过小,则需要很大的B才能获得好的预测效果。
(3)每棵树的分支结点数d,它控制着整个模型的复杂性。

7.总结与思考
以我目前浅薄的认知,总的来说,决策树更适合解决分类问题,这从西瓜书中的对分类问题的侧重及把连续问题离散化可以看出,但ISL中也介绍了回归树,评价模型性能提升的指标也变为了RSS,可以作为参考。

划分选择与剪枝处理是决策树生成的核心内容,划分选择时往往不能只考虑信息增益或增益率,应该综合考虑。剪枝处理方面,除了西瓜书介绍的预剪枝和后剪枝,ISL还介绍了代价复杂性剪枝,使剪枝更加细致。

在解决缺失值问题时,先用无缺失的样本集训生成决策树,再按一定的策略划分有缺失值的样本。

多变量决策树把属性作为变量,每次划分不是单纯按单个属性考虑,而是测试多个变量的线性组合,这样得出的决策树虽然不会很复杂,但解释度可能较差。

装袋法,随机森林,提升法等利用多个决策树进行预测的方法可以有效减小方差,使决策树有更好的预测能力。袋装法用到了自助法,且可以用袋外误差估计来取代交叉验证;随机森林是袋装法的改进,每次划分选择时的候选属性只是所有属性的一部分;提升法是一种舒缓的学习方法,由B,λ,d等调整参数决定算法的细节。

接近人的决策模式的决策树具有解释性强的优点,在解释性方面甚至比线性回归更方便,且可用图形表示,更加直观,但在实际应用中还是要根据情况选择模型,不能一概而论。

机器学习读书笔记之决策树相关推荐

  1. 机器学习读书笔记:决策树

    文章目录 如何形成一颗决策树 划分选择 信息熵 & 信息增益 基尼指数 剪枝 预剪枝 后剪枝 连续值 & 属性缺失处理 连续值 属性缺失 多变量决策树 如何形成一颗决策树 ​ 决策树从 ...

  2. 机器学习读书笔记(开篇)

    新近到手一本<机器学习实战>(Peter Harringtom),兴奋之余,本着好记性不如烂笔头的真理,打算将读书的过程记录下来,形成读书笔记,重点记录自己所理解的算法思想与应用示例.本人 ...

  3. Bishop 模式识别与机器学习读书笔记_ch1.1 机器学习概述

    模式识别与机器学习-读书笔记 第一章 机器学习概述(I) 数据模式搜索问题是一个基础性的问题,有着悠久而成功的历史. 16世纪对第谷布拉赫的广泛天文观测使约翰内斯开普勒发现了行星运动的经验定律,从而为 ...

  4. [Mitchell 机器学习读书笔记]——人工神经网络

    1.简介 神经网络学习方法对于逼近实数值.离散值或向量值的目标函数提供了一种健壮性很强的方法.在现实中,学习解释复杂的现实世界中的传感器数据,人工神经网络(Artificial Neural Netw ...

  5. 机器学习实战读书笔记(2)决策树

    信息熵是什么? 1. 信息论之父 C. E. Shannon 在 1948 年发表的论文"通信的数学理论( A Mathematical Theory of Communication )& ...

  6. 李宏毅机器学习—读书笔记

    李宏毅机器学习笔记(LeeML-Notes) leeml-notes 机器学习 人工智慧(Artificial Intelligence)是我们想要达成的目标,希望机器可以跟人一样的聪明.机器学习(M ...

  7. 掌握python机器学习-读书笔记8 (抽样回归算法)

    为什么80%的码农都做不了架构师?>>>    12 抽查回归算法 今天来学习如何使用python scikit learn 来进行一些回归算法的使用. 篇幅限制, 不会对具体算法做 ...

  8. 机器学习读书笔记之6 - 贝叶斯系列

    概率论只不过是把常识用数学公式表达了出来. --拉普拉斯 目录 0. 前言  1. 历史      1.1 一个例子:自然语言的二义性      1.2 贝叶斯公式  2. 拼写纠正  3. 模型比较 ...

  9. 机器学习实战笔记:决策树(Decision Tree)

    PS 该部分内容所设计到的程序源码已经存在我的github上,地址奉上: https://github.com/AdventureSJ/ML-Notes/tree/master/DecisionTre ...

  10. 机器学习读书笔记:集成学习

    文章目录 集成学习 AdaBoost 代码 Bagging与随机森林 Bagging 随机森林(Random Forest) 结合策略 增加多样性的策略 多样性度量 集成学习 ​ 之前已经讲过了好几个 ...

最新文章

  1. js和 jquery对象
  2. BZOJ3569: DZY Loves Chinese II(线性基构造)
  3. 超全超详细AC-DC电源模块测试教程!
  4. LeetCode7——Reverse Integer(将一个整数反转,注意溢出的处理)
  5. 查看nginx进程_nginx的进程模型与配置
  6. python `__slots__`
  7. mysql中文显示问号,不能识别中文的解决方案
  8. iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
  9. 采用java编写一个软件,100以内的口算题【软件构造大作业】
  10. linux 登录qq虚拟机,不能输入中文
  11. 秋季最养胃饮食排行榜单
  12. “车”的故事,我的信息化建设和管理愚见
  13. 中科大计算机考研录取分数线_2017计算机专业学校考研难度排行榜,计算机考研难度排名...
  14. CCF201809-3
  15. OrCAD学习笔记1
  16. Elastic search常用分词 和 多字段搜索优化
  17. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14】—— 数据库3
  18. Zynq-Linux移植学习笔记之34-使用PCS/PMA IP核配置网络
  19. IBM结盟飞康VTL提供高性能备份与重复数据删除
  20. 解决vue中img或元素背景图片无法显示或路径错误问题

热门文章

  1. 自动化运维工具inception+archer
  2. 中台实践:数据中台建设五步法
  3. 光学系统中的几何像差
  4. 【春节档排片地域可视化分析】
  5. rest_framework--过滤器filters--搜索
  6. Simulink与控制系统仿真笔记01
  7. 微信屏蔽网址的解决办法:366API轻松实现被微信屏蔽的网址在微信内正常访问
  8. 使用USBCAN通讯(转载)
  9. 用微型计算机原理做流水灯,微机原理流水灯设计.doc
  10. 华为HCNA实验学习