【机器学习算法】【四】决策树

一. 从逻辑回归到决策树

LR模型是利用线性回归的预测值,通过sigmoid映射为概率,来对数据做预测,有非常友好的数据预处理特性,工业界应用很丰富。

LR是从数学角度出发,给不同的特征乘以不同的权重来得到是否相亲的概率。

决策树的处理方式

二. 什么是决策树

  1. 决策树是一种解决分类问题的算法,当然CART也可以用来解决回归问题,但是决策树主要是用来解决分类问题。

  2. 决策树算法采用树形结构,使用层层推理来实现最终的分类。决策树由下面几种元素构成
    根节点:包含样本的全集
    内部节点:对应特征属性测试
    叶节点:代表决策的结果

    预测时,在树的内部节点处用某一属性值进行判断,根据判断结果决定进入哪个分支节点,直到到达叶节点处,得到分类结果。

  3. 决策树通常有三个步骤

  • 特征选择:特征选择决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。在特征选择中通常使用的准则是:信息增益
  • 决策树的生成:选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。
  • 决策树的修剪:剪枝的主要目的是对抗「过拟合」,通过主动去掉部分分支来降低过拟合的风险。
  1. 决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。

决策树算法的核心:从属性集中选择最优的划分属性

三. 如何选择最优的划分属性-----熵

熵是度量样本不纯度的指标,样本不纯度越大,熵越大,越无序
熵是度量信息的期望值。

信息: l ( x i ) = − l o g 2 p ( x i ) l(x_i)=−log_2p(x_i) l(xi)=log2p(xi)

熵: H = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i ) H=−\sum_{i=1}^n{p(x_i)log_2p(x_i)} H=i=1np(xi)log2p(xi)

熵越小,样本的纯度越高,所以决策树的生长过程也是不断的将数据的不纯度降低的过程,希望最后得到的分类结果纯的很高,也就是准确性很高。

四. 三种典型的决策树算法

1. 信息增益:ID3

机器学习的过程是希望将样本的不纯度往下降的过程,希望熵下降的过程,那么最优属性的划分可以参考那个属性对当前样本的熵降低的最多

因为是将一个集合划分为多个子集了,所以计算划分后的信息熵是将各个子集的熵分别求出来,然后利用比例权重求和,作为所有子集的最终信息熵。

举个具体的实例



信息增益存在的问题:假如我们用“学号”作为特征,也就是每个人一个学号,将45个人分到45个桶里,此时的纯度最高,但是对新来的特征没有任何意义即分叉越多,越肯定,纯度越高,所带来的增益很大,但是这个特征可能没有任何意义,换句话说可能对于新的数据就不能很好的划分了。所以我们选用相对值来衡量信息的增益,也就是信息增益率

ID3算法缺点:只能处理离散型属性,并且对倾向于选择取值较多的属性

2. 信息增益率:C4.5

C4.5 克服了 ID3 仅仅能够处理离散属性的问题,以及信息增益偏向选择取值较多特征的问题

  • C4.5处理ID3偏向取值较多特征的问题
    在ID3中: G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^V \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

    这样就限制了a的取值,不会只取分支多的那个属性了,会权衡一下。
  • C4.5 处理连续特征
    C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。但是,对连续属性值需要扫描排序,会使C4.5性能下降。
    如何处理连续值
    因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。

ID3为什么不能处理连续特征,因为如果你也按照C4.5的处理方式处理连续特征,那么特征就会像学号一样,分叉很多ID3会偏向取值较多的特征,就会选择了连续的这个特征作为划分依据,但是这并不合适,所以ID3不能处理连续型变量。

ID3和C4.5都是分类树,CART(Classification and regression tree)可以是分类/回归树。

3. CART(Classification and Regression Tree)

CART参考博客
这种算法即可以用于分类,也可以用于回归问题。

  • 如果待预测分类是离散型数据,则CART生成分类决策树。
  • 如果待预测分类是连续性数据,则CART生成回归决策树。
3.1 分类决策树

CART 算法使用了基尼系数取代了信息熵模型。

  • 基尼系数的理解:
    假如现在有一个袋中有黑、白两种球:
    ① 摸出一个球颜色为 C 1 C1 C1,放回之后再摸出一个球 C 2 C2 C2,如果 C 1 = C 2 C1=C2 C1=C2,则说明两种颜色个数差比较大,即样本的纯度较高,有序,熵越小。
    ② 如果 C 1 ≠ C 2 C1≠C2 C1=C2,则说明两种球颜色数量比较接近,袋子中样本的熵比较大。
    总结: C 1 = C 2 C1=C2 C1=C2概率越大,说明熵越小,不纯度越小,所以我们希望树朝着 C 1 = C 2 C1=C2 C1=C2概率增大的方向发展。

随机抽取两个样例,类别标记不一致的概率越大,表示纯度越低。我们需要纯度高,所以向基尼指数小的方向发展。

基尼指数的意义:1-(两次摸出球颜色相同的概率)=两次摸出颜色不同的概率
颜色不同,表示熵越小,则gini指数表示了往熵减小的方向发展。

  • 基尼指数 vs 熵

    熵=基尼指数
  • 具体例子

    针对上述离散型数据,按照体温为恒温和非恒温进行划分。其中恒温时包括哺乳类5个、鸟类2个,非恒温时包括爬行类3个、鱼类3个、两栖类2个,如下所示我们计算D1,D2的基尼指数。
    在这里插入图片描述
    然后计算得到特征体温下数据集的Gini指数,最后我们选择Gain_Gini最小的特征和相应的划分。
    在这里插入图片描述
3.2 回归决策树

参考博客
回归树整体流程类似,不过在每个结点(不一定是叶子结点)都会得到一个预测值,该预测值等于属于该节点的所有人年龄的平均值,分支时穷举每一个feature的每个阈值作为最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方误差(真实年龄-预测年龄)^2的和/N,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。

在这里插入图片描述
在这里插入图片描述
具体例子

选择最优特征:
(1)按特征"面积" = 20 划分数据集,
y1 均值为 40.1 40.1 40.1
y2 均值为 ( 40.3 + 70.4 + 70.2 ) / 3 = 60.3 (40.3 + 70.4 + 70.2) / 3 = 60.3 (40.3+70.4+70.2)/3=60.3,
则平方误差为: 0 + ( 40.3 – 60.3 ) 2 + ( 70.4 – 60.3 ) 2 + ( 70.2 – 60.3 ) 2 = 600.02 0 + (40.3 – 60.3)^2 + (70.4 – 60.3)^2 +(70.2 – 60.3)^2= 600.02 0+40.360.32+70.460.32+70.260.32=600.02

(2)按特征"面积" = 21 划分数据集,则平方误差为:
y1 均值为 ( 40.1 + 40.3 ) / 2 = 40.2 (40.1 + 40.3)/ 2 = 40.2 (40.1+40.3)/2=40.2
y2 均值为 ( 70.4 + 70.2 ) / 2 = 70.3 (70.4 + 70.2) / 2 = 70.3 (70.4+70.2)/2=70.3,
则平方误差为: ( 40.1 – 40.2 ) 2 + ( 40.3 – 40.2 ) 2 + ( 70.4 – 70.3 ) 2 + ( 70.2 – 70.3 ) 2 = 0.04 (40.1 –40.2)^2 + (40.3 –40.2)^2 + (70.4 –70.3)^2 +(70.2 –70.3)^2= 0.04 40.140.22+40.340.22+70.470.32+70.270.32=0.04

(3)按特征"面积" = 35 划分数据集,则平方误差为:
y1 均值为 ( 40.1 + 40.3 + 70.4 ) / 3 = 50.27 (40.1 + 40.3 + 70.4) / 3 = 50.27 (40.1+40.3+70.4)/3=50.27
y2 均值为 70.2 70.2 70.2,
则平方误差为: ( 40.1 – 50.27 ) 2 + ( 40.3 – 50.27 ) 2 + ( 70.4 – 50.27 ) 2 + 0 = 608.05 (40.1 –50.27)^2 + (40.3 –50.27)^2 +(70.4 –50.27)^2 + 0= 608.05 40.150.272+40.350.272+70.450.272+0=608.05

综上所述,由于按特征"面积" = 21 比特征"面积" = 20、“面积” = 35 划分的平方误差小,所以特征"面积" = 21 为切分点。
按最优特征划分数据集
以特征"面积" = 21 为切分点,将数据切分为
面 积 = 20 , 价 格 = 40.1 ; 面 积 = 21 , 价 格 = 40.3 {面积 = 20,价格 = 40.1; 面积 = 21, 价格 = 40.3} =20,=40.1;=21,=40.3
面 积 = 35 , 价 格 = 70.4 ; 面 积 = 36 , 价 格 = 70.2 {面积 = 35,价格 = 70.4; 面积 = 36, 价格 = 70.2} =35,=70.4;=36,=70.2两个子集。
其中子集
面 积 = 20 , 价 格 = 40.1 ; 面 积 = 21 , 价 格 = 40.3 {面积 = 20,价格 = 40.1; 面积 = 21, 价格 = 40.3} =20,=40.1;=21,=40.3的目标变量非常接近,故不继续划分,得叶节点值 ( 40.1 + 40.3 ) / 2 = 40.2 (40.1 + 40.3) / 2 = 40.2 (40.1+40.3)/2=40.2
同理得子集 面 积 = 35 , 价 格 = 70.4 ; 面 积 = 36 , 价 格 = 70.2 {面积 = 35,价格 = 70.4; 面积 = 36, 价格 = 70.2} =35,=70.4;=36,=70.2 的叶节点值为
( 70.4 + 70.2 ) / 2 = 70.3 (70.4 + 70.2) /2=70.3 (70.4+70.2)/2=70.3

五. 决策树的剪枝

参考:决策树的剪枝的例子
剪枝是要用到验证集的。

首先剪枝(pruning)的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning)

  • 预剪枝(pre-pruning):预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
  • 后剪枝(post-pruning):后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。

六. 决策树是如何对对连续属性和对缺失属性的处理

参考:决策树处理连续值,缺失值
决策树(decision tree)(三)——连续值处理
决策树(decision tree)(四)——缺失值处理

  • 对于连续值,连续值a在D上出现了n个不同的取值,也就是连续值离散化处理。

C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。
CART:遍历所有输入变量j 和切分点s,根据最小化平方误差准则选取;

  • 对于缺失值,通过修改信息增益的公式,在原始计算前添加了占比系数作为权重,为每个样本赋予一个权重。
参考:

决策树
机器学习之分类与回归树(CART)
CART实例分析
总结参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值