• 决策树(分类树、回归树)


    决策树

    决策树


    参考文献

    [1] 李航. 统计学习方法[M]. 北京:清华大学出版社,2012

    决策树

    前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾。写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : )


    决策树模型

    决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择选择下一比较分支,直到叶子节点作为最终的决策结果。

    • 内部节点:对应于一个属性测试
    • 叶节点:对应于决策结果
    • 根节点包含样本全集;
    • 每个节点包括的样本集合根据属性测试的结果被划分到子节点中;
    • 根节点到每个叶节点的路径对应对应了一个判定测试路径;

    决策树的结构还是比较好理解的,如果不明白,可以看一下图中的例子,这是一个简单判断这个键盘我喜不喜欢的决策树模型:
    这里写图片描述

    目标变量可以采用一组离散值的树模型称为分类树(常用的分类树算法有ID3、C4.5、CART),而目标变量可以采用连续值(通常是实数)的决策树被称为回归树(如CART算法)。

    决策树算法本质上就是要找出每一列的最佳划分以及不同列划分的先后顺序及排布


    决策树学习算法:

    • 特征选择
    • 决策树生成
    • 决策树剪枝

    (下面讨论的都是分类树,回归树会在后面单独再谈)

    特征选择:

    特征选择也即选择最优划分属性,从当前数据的特征中选择一个特征作为当前节点的划分标准。我们希望在不断划分的过程中,决策树的分支节点所包含的样本尽可能属于同一类,即节点的“纯度”越来越高。而选择最优划分特征的标准不同,也导致了决策树算法的不同。

    为了找到最优的划分特征,我们需要先了解一些信息论的知识:

    • 信息熵(information entropy)
    • 信息增益(information gain)
    • 信息增益率(information gain ratio)
    • 基尼指数(Gini index)

    熵:
    在信息论和概率统计中,熵(entropy)是表示随机变量不确定性的度量,设X是一个取有限值的离散随机变量,其概率分布为

     
    P(X=xi)=pi,i=1,2,...,n


    则随机变量 X的熵定义为

    H(X)=i=1npilogpi


    上述公式中的对数通常以2为底
    熵越大,随机变量的不确定性越大。为了能够更好地理解熵的意义,我们下面举一个例子来说明。
    当随机变量只取两个值,如1,0时,即 X的分布为

    P(X=1)=p,P(X=0)=1p,0p1


    则熵为

     
    H(p)=plog2p(1p)log2(1p)


    H(p)的函数图像如下:
    $H(p)$随概率p变化的曲线
    从图中我们不难看出 p=0or1H(p)为0,即不确定性为0。当 p=0.5时,不确定性最大。

    条件熵:
    设有随机变量(X,Y)

    。条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵H(Y|X)定义为X给定条件下Y的条件概率分布的熵对X

    的数学期望

    H(Y|X)=i=1npiH(Y|X=xi)


    这里,pi=P(X=xi),i=1,2,...,n

    信息增益:
    信息增益表示得知特征X

    的信息而使得类Y的信息的不确定性减少程度。接下来给出定义,特征A对训练数据集D的信息增益g(D,A),为集合D的熵H(D)与特征A给定条件下D的条件熵H(D|A)

    之差,即

     
    g(D,A)=H(D)H(D|A)
    • 信息增益的算法:

      输入:训练数据集D

    ,特征A
    输出:特征A对训练数据集D的信息增益g(D,A)
    (1):计算数据集D的熵H(D)


     
    H(D)=k=1K|Ck||D|log2|Ck||D|


    (2):计算特征A对训练数据集D的条件熵H(D|A)

     
    H(D|A)=i=1n|Di||D|H(Di)=i=1n|Di||D|k=1K|Dik||Di|log2|Dik||Di|


    (3):计算信息增益

     
    g(D,A)=H(D)H(D|A)


    |D|为样本容量,设有K个类Ck,k=1,2,...,K,|Ck|为属于类Ck的样本个数。设特征An个不同取值,根据特征A的取值将D划分为n个子集D1,D2,...,Dn,Dik为子集Di中属于类Ck

    • 的集合。

    信息增益率:
    特征A

    对训练数据集D的信息增益gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)

    之比,即

     
    gR(D,A)=g(D,A)HA(D)


    其中, HA(D)=ni=1|Di||D|log2|Di||D|,n是特征 A取值的个数。
    注意区别H(D|A)HA(D)

    基尼指数:
    基尼指数Gini(D)

    表示集合D不确定性,基尼指数Gini(DA=a)表示集合DA=a分割后的不确定性(类似于熵),基尼指数越小,样本的不确定性越小。
    分类问题中,假设有K
    个类,样本点属于第k类的概率为pk,

    则概率分布的基尼指数定义为

     
    Gini(p)=k=1Kpk(1pk)=1k=1Kp2k


    如果样本集合 D
    根据特征A是否取某一可能值 a被分割成D1D2两部分,即
    D1=
    { (x,y)D|A(x)=a} ,D2=DD1
    则在特征 A
    的条件下,集合D的基尼指数定义为

     
    Gini(D,A=a)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

    决策树生成

    生成算法划分标准
    ID3
      信息增益
    C4.5
      信息增益率
    CART
      基尼指数

    ID3:

     

    ID3

    算法的核心是在决策树各个节点上根据信息增益来选择进行划分的特征,然后递归地构建决策树。
    具体方法:

    1. 从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益值最大的特征作为节点的划分特征;
    2. 由该特征的不同取值建立子节点;
    3. 再对子节点递归地调用以上方法,构建决策树;
    4. 到所有特征的信息增益都很小或者没有特征可以选择为止,得到最终的决策树

    ID3

    的局限:

    1. 没有剪枝
    2. 采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征(这也是C4.5
    1. 采用信息增益率的原因)

    C4.5:

    C4.5

    ID3相似,但对ID3进行了改进,在这里不再详细描述C4.5的实现,就讲一下有哪些基于ID3

    的改进:

    1. 用信息增益率来选择划分特征,克服了用信息增益选择的不足
    2. 在构造树的过程中进行剪枝
    3. 对连续值与缺失值进行处理

    为什么C4.5

    要用信息增益率代替信息增益?为什么信息增益会偏向多取值特征?

    信息增益在面对类别较少的离散数据时效果较好,但是面对取值较多的特征时效果会很不如人意。关于信息增益对取值较多特征的偏向性,我认为原因是:当特征的取值较多时,根据此特征划分得到的子集纯度有更大的可能性会更高(对比与取值较少的特征),因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。举个较为极端的例子可能更好理解:如果特征A

    的取值能将每一个样本都分到一个节点当中去的时候(如编号等特征),条件熵部分会为0,这意味着该情况下的信息增益达到了最大值,故ID3算法一定会选择特征A。但是,显然的,我们知道这个特征A显然不是最佳选择。
    那么为什么信息增益率就能改善这种情况呢?先来看一下信息增益率的计算公式:

    gR(D,A)=g(D,A)HA(D)


    其中,HA(D)=ni=1|Di||D|log2|Di||D|
    ,HA(D)又叫做特征A的内部信息,HA(D)其实像是一个衡量以特征A的不同取值将数据集D分类后的不确定性的度量。如果特征A的取值越多,那么不确定性通常会更大,那么HA(D)的值也会越大,而1HA(D)的值也会越小。这相当于是在信息增益的基础上乘上了一个惩罚系数。即gR(D,A)=g(D,A)惩罚系数.
    (我的理解如果有什么错误的地方的话,希望大家能够指正,不胜感激XD)

    CART:

    CART(classificationandregressiontree),

    分类回归树算法,既可用于分类也可用于回归,在这一部分我们先主要将其分类树的生成。区别于ID3C4.5,CART假设决策树是二叉树,内部节点特征的取值为“是”和“否”,左分支为取值为“是”的分支,右分支为取值为”否“的分支。这样的决策树等价于递归地二分每个特征,将输入空间(即特征空间)划分为有限个单元。CART

    的分类树用基尼指数来选择最优特征的最优划分点,具体过程如下

    1. 从根节点开始,对节点计算现有特征的基尼指数,对每一个特征,例如A

    ,再对其每个可能的取值如a,根据样本点对A=a的结果的”是“与”否“划分为两个部分,利用Gini(D,A=a)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

    • 进行计算;
    • 在所有可能的特征A
    以及该特征所有的可能取值a
    • ,选择基尼指数最小的特征及其对应的取值作为最优特征和最优切分点。然后根据最优特征和最优切分点,将本节点的数据集二分,生成两个子节点
    • 对两个字节点递归地调用上述步骤,直至节点中的样本个数小于阈值,或者样本集的基尼指数小于阈值,或者没有更多特征后停止;
    • 生成CART

    1. 分类树;

    回归树:

    回归树是可以用于回归的决策树模型,一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值.与分类树不同的是,回归树对输入空间的划分采用一种启发式的方法,会遍历所有输入变量,找到最优的切分变量j

    和最优的切分点s,即选择第j个特征xj和它的取值s将输入空间划分为两部分,然后重复这个操作。
    而如何找到最优的j
    s

    是通过比较不同的划分的误差来得到的。一个输入空间的划分的误差是用真实值和划分区域的预测值的最小二乘来衡量的,即

    xiRm(yif(xi))2


    其中,f(xi)
    是每个划分单元的预测值,这个预测值是该单元内每个样本点的值的均值,即

     
    f(xi)=cm=ave(yi|xiRm)


    (将输入空间划分为M
    个单元R1,R2,...,Rm)

    那么,j

    s

    的求解可以用下式进行

     
    minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]


    其中, R1(j,s)=
    { x|xjs}和 R2(j,s)= { x|xj>s}是被划分后的两个区域

    梳理一下上述内容,最小二乘回归树的生成方法如下

    1. 选择最优的切分变量j

    和最优的切分点s,求解

     
    minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]


    遍历所有特征,对固定的特征扫描所有取值,找到使上式达到最小值的对(j,s)

    • .
    • 用选定的对 (j,s)

    1. 划分区域,并确定该区域的预测值;
    2. 继续对两个字区域调用上述步骤,直至满足停止条件;
    3. 生成回归树;

    举个例子,我们要对南京市各地区的房价进行回归预测,我们将输入空间不断的按最小误差进行划分,得到类似下图的结果,将空间划分后,我们会用该单元内的均值作为该单元的预测值,如图中一片区域的平均房价作为该划分单元内房价的预测值(唔,怎么感觉这个例子还是不太准确…)。

    这里写图片描述
    (图片来源于网络,如有侵权会马上删除:)


    决策树剪枝

    准备写的时候才发现我自己剪枝这部分并没有搞得非常清楚,只能先放在这,日后再进行更新好了。。。


    参考文献

    [1] 李航. 统计学习方法[M]. 北京:清华大学出版社,2012

  • 相关阅读:
    sql 相关子查询
    sql 执行计划
    SQL表连接查询(inner join、full join、left join、right join)
    sql执行顺序
    sql 语句 嵌套子查询 执行顺序分析
    只有程序员才看得懂的情书
    Give Me an E
    hdu 1114 (背包变形)
    模版 并查集
    背包 讲解
  • 原文地址:https://www.cnblogs.com/fengtai/p/14046065.html
Copyright © 2020-2023  润新知