机器学习-决策树

一种基本的分类与回归的方法

定义在特征空间与类空间上的条件概率分布

训练时,利用训练数据,根据损失函数最小化的原则建立决策树模型

节点分为两种,内部节点和叶节点:内部节点表示一个特征,叶节点表示一个类

 

决策树算法:特征选择—>决策树生成—>决策树剪枝

决策树的生成只考虑局部最优,决策树的剪枝考虑全局最优。

决策树常用的有三种:ID3、C4.5、CART


特征选择

特征选择在于选取对训练数据具有分类能力的特征。

特征选区的准则时信息增益信息增益比。

熵与条件熵:

什么是熵:是表示随机变量不确定性的度量。

X是一个取有限个值的离散随机变量,其概率分布如下

                                                       P(X=x_{i})=p_{i}, \qquad i=1,2,\cdots ,n           (一)

随机变量X的熵:

                                                       H(p)=-\sum_{i=1}^{n}p_{i}\log p_{i}                                       (二)

熵越大,随机变量的不确定性就越大,可得

                                                         0\leqslant H(p)\leqslant \log n

即当p_{i} = \frac{1}{n}时熵最大。

条件熵:

表示,数据集有两个特征,且称为XY,都是离散随机变量,概率分布与式(一)相同,在决策树的建立过程中,需要根据特征切分数据集,再进行下一步迭代;在根据X切分数据后,切分出来的每个数据集要根据下一个特征Y,再做切分,这时,在某个X的切分结果,Y的熵成为条件熵,用H(Y|X=x_{i})表示,定义为X给定条件下Y的条件概率分布的熵。

条件熵就是

上面提到的熵对X的数学期望。(然而对数学期望的理解并不到位)

即为H(Y|X) = \sum_{i=1}^{n} p_{i} H(Y|X=x_{i})

其中,p_{i}=P(X=x_{i}),i=1,2,\cdots ,n  指按照X切分后的每个子集的概率

信息增益:

不同的特征往往具有不同的信息增益,信息增益大的特征具有更强的分类能力。

特征A对数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与经验条件熵H(D|A)之差:

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

一般称熵与条件熵之差为互信息,等价于决策树中的信息增益。

由于以信息增益划分数据存在偏向于选择取值更多的特征,使用信息增益比可以对这一问题进行矫正。

信息增益比:

g_{R}(D,A)=\frac{g(D,A)}{^{H_{A}(D)}}

        上式,特征A对数据集D的信息增益比g_{R}(D,A)为其信息增益与数据集D关于特征A的熵H_{A}(D)(与式二得计算方式相同)之比。


决策树生成

 ID3算法

ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归构建决策树。

终止条件:直到所有特征的信息增益均很小或没有特征可以选择为止。

若信息增益均很小怎么处理:不继续向下分支,直接按当前所得的数据的label中数量最多的类作为分类结果。但若数量最高的仍是多类呢?没查到相关资料,若有人了解希望能够交流下这个问题。

ID3相当于用极大似然法进行概率模型的选择。

 生成过程:

ID3算法只有树的生成,生成的树容易产生过拟合。

 

C4.5算法

该算法对ID3进行了改进,使用信息增益比来选择特征。


决策树剪枝

决策树容易出现过拟合现象,原因在于在学习时过于考虑如何提高对训练数据的正确分类,从而构建出过于复杂度决策树。

解决办法:考虑决策树的复杂度,对已生成的决策树进行简化。

通过极小化决策树整体的损失函数或代价函数来实现。

设树T的叶节点个数为|T|t是树T的叶节点,该叶节点有N_{t}个样本点,H_{t}(T)为叶节点t上的经验熵,\alpha \geqslant 0为参数,则机器学习的损失函数可定义为

                                                 C_{\alpha }(T)=\sum_{t=1}^{|T|}N_{t}H_{t}(T)+\alpha |T|

(损失函数的极小化等价于正则化的极大似然估计,所以利用损失函数最小原则进行剪枝就是用正则化的极大似然函数进行模型选择)

其中经验熵为
                                               H_{t}(T)=-\sum_{a}^{b}(N_{tk}/N_{t})\log (N_{tk}/N_{t})

损失函数中,右端第一项记作

                                               C(T)=\sum_{t=1}^{|T|}N_{t}H_{t}(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{|K|}N_{tk}log(N_{tk}/N_{t})

                                               C_{\alpha }(T)=C(T)+\alpha |T|

C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度

|T|表示模型的复杂程度

\alpha \geqslant 0,控制两者之间的影响

        较大的\alpha促使选择较简单的模型,较小的\alpha促使选择较复杂的模型,\alpha =0意味着只考虑模型与数据的拟合程度,不考虑模型的复杂度。

剪枝就是当\alpha确定时,选择损失函数最小的模型,即损失函数最小的子树。当\alpha确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度越高,反之同理。

 

设一组叶节点回缩到其父节点前后的整体树分别为T_{B}T_{A},对应的损失函数分别为C_{\alpha }(T_{B})C_{\alpha }(T_{A}),如果

                                                     C_{\alpha }(T_{A})\leqslant C_{\alpha }(T_{B})

 则进行剪枝,将其父节点变为新的叶节点。

 重复上一步骤,直至得到损失函数最小的子树。


 CART算法

CART生成

对回归树用平方误差最小化准则,分类树用基尼指数最小化准则。

该算法的假设:树的结构是二叉树。

回归树生成

        设XY为输入和输出变量,并且Y是连续变量 ,给定数据集

                                                     D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),\cdots ,(x_{N},y_{N}) \right \}

一个回归树对应着输入空间(即特征空间)的一个划分以及再划分但愿上的输出值。假设将输入空间划分为M个单元R_{1},R_{2},\cdots ,R_{M},并且每个单元R_{m}上有一个固定的输出值c_{m},于是回归模型可表示为

                                                      f(x)=\sum_{m=1}^{M}c_{m}I(x\in R_{m})

当输入空间的划分确定时,可以用平方误差

                                                      \sum_{x_{i}\in R_{m}}^{ }(y_{i}-f(x_{i}))^2

来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。

易得,单元R_{m}上的c_{m}的最优值\hat{c_{m}}R_{m}上所有的输入实例x_{i}对应的输出y_{i}的均值,即

                                                      \hat{c_{m}}=ave(y_{i}|x_{i}\in R_{m})

重点是怎样对输入空间进行划分

选择第j个变量x^{(j)}和它的取值s作为切分变量和切分点,定义两个区域:

                                                     R_{1}(j,s)=\left \{ x|x^{(j)} \leqslant s \right \}R_{2}(j,s)=\left \{ x|x^{(j)} >s \right \}

然后寻找最优切分变量j和最优切分点s,求解:

                                                    \underset{j,s}{min}[ \underset{c_{1}}{min}\sum_{x_{i}\in R_{1}(j,s)}^{ }(y_{i}-c_{1})^2+ \underset{c_{2}}{min}\sum_{x_{i}\in R_{2}(j,s)}^{ }(y_{i}-c_{2})^2 ]

对于固定输入变量j可以找到最有且分点s.

                                                     \hat{c_{1}}=ave(y_{i}|x_{i}\in R_{1})\hat{c_{2}}=ave(y_{i}|x_{i}\in R_{2})

遍历所有输入变量,找到最优的切分变量,将输入控件划分为两个区域,接着对每个区域重复划分上述过程,知道满足停止条件。这样的回归树通常称为最小二乘回归树。

为什么要用均方差mse来作为分裂的依据呢?

只要是能衡量预测值和真实值/目标值之间的差距的数学公式,都可以用,例如信息增益、信息增益比、基尼系数等等。但是均方差有更好的好处:一阶导数和二阶导数可求并好求。

回归树分裂终止条件:没有可用的特征

 

分类树生成

分类树用基尼系数选择最优特征,同时决定该特征的最优二值切分点。

分类问题中,假设有K个类,样本点属于第k类的概率为p_{k},则概率分布的基尼指数定义为

                                                      Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{k}p_{k}^{2}

对于二分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为

                                                      Gini(p)=2p(1-p)

对于给定的样本集合D,其基尼指数为

                                                     Gini(p)=1-\sum_{K}^{k=1}\left ( \frac{|C_{k}|}{|D|} \right )^{2}

这里C_{k}D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A是否取某一可能指a被分割成D_{1}D_{2}两部分,即

                                                    D_{1}=\left \{ (x,y)\in D|A(x)=a \right \},D_{2}=D-D_{1}

则在特征A的条件下,集合D的基尼指数定义为

                                                    Gini(D,A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2})

基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经过A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性就越大(与熵类似)。

 

CART生成算法

  1. 在所有的可能的特征A以及他们所有的可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。
  2. 依据最有特征与最优切分点,从现结点生成两个子节点,将训练数据一句特征分配到两个子节点中去。
  3. 对子节点递归调1、2两步,直至满足停止条件。
  4. 最终生成CART决策树。

停止条件;

  • 节点中的样本个数小于预定阈值
  • 样本集的基尼指数小于预定阈值(即样本基本属于同一类)
  • 没有更多特征

CART剪枝

        CART剪枝算法从“完全生长”的决策树地段减去一些子树,是模型变得简单。,从而对未知数据有更准确的预测。

        剪枝算法分两步:首先从生成算法的产生的决策树T_{0}低端开始不断剪枝,直到T_{0}的根结点,形成一个子树序列\left \{ T_{0},T_{1},\cdots ,T_{n} \right \},然后通过交叉验证方法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

具体地:

从整体树T_{0}开始剪枝,对T_{0}的任意内部结点t,以t为单节点树的损失函数是

                                                               C_{a}(t)=C(t)+\alpha

t为根节点的子树T_{t}的损失函数是

                                                               C_{a}(T_{t})=C(T_{t})+\alpha|T_{t}|

\alpha =0\alpha充分小时,有不等式

                                                               C_{\alpha }(T_{t})< C_{\alpha }(t)

\alpha增大时,在某一\alpha

                                                               C_{\alpha }(T_{t})=C_{\alpha }(t)

\alpha再增大时,只要                                

                                                               \alpha =\frac{C(t)-C(T_{t})}{|T_{t}|-1}

T_{t}t有相同的损失函数,而t的结点少,因此tT_{t}更可取,对T_{t}进行剪枝。

为此,对T_{0}中每一内部结点t,计算

                                                               g(t) =\frac{C(t)-C(T_{t})}{|T_{t}|-1}

它表示剪枝后整体损失函数减少的程度。在T_{0}中减去g(t)最小的T_{t},将得到的子树作为T_{1},同时将最小的g(t)设为\alpha _{1}T_{1}为区间[ \alpha _{1},\alpha _{2} )的最优子树。

如此剪枝下去直至得到根节点。在这一过程中不断增加\alpha的值,产生新的区间。

 

然后,在剪枝得到的子树序列中通过交叉验证选区最优子树T_{\alpha }

具体方法:用独立的验证数据集,测试子树序列中各棵子树的平方误差或基尼系数。

平方误差或基尼系数最小的决策树被认为是最优的决策树。

CART剪枝算法步骤总结:

 

  1. 优点
    • 决策树算法中学习简单的决策规则,建立决策树模型的过程非常容易理解,决策树模型可以可视化,非常直观。
    • 速度快,准确性高
    • 对数据要求相对低:
      • 预处理往往更简单,比如无需去掉空白值、无需归一化等;
      • 能同时处理数据型和常规型属性(比如样本可以是:男,30岁,医生,结婚。这包含了数据、常规型属性);
      • 对缺失值不敏感(可赋予平均值、中位数、众数等),可以处理不相关特征数据;
      • 对异常值鲁棒。
    • 应用范围广,可用于分类和回归,而且非常容易做多类别的分类。
    • 可以做特征选择、特征组合
  2. 缺点
    • 很容易在训练数据中生成复杂的树结构,造成过拟合。剪枝可以缓解过拟合的负作用,常用方法是限制树的高度、叶子结点中的最少样本数量。
    • 难以预测连续性的字段,即学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树。
    • 回归预测输出值缺少平滑性,只会是有限的几种数值。
    • 不适合处理高维稀疏数据,不适合处理特征关联性较强的数据。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值