机器学习之决策树

机器学习之决策树

一、引言
作为经典的统计学习模型——决策树,因为其算法简易性及模型的可解释性,被广泛的使用。说起决策树,大家最容易想到的就是IF-THEN规则,其实就是对不同的属性进行IF-THEN规则的划分,直到每个样本都能划分到某个叶节点上。
对于决策树,我们将从以下六个方面进行阐述:
1.决策树的生成
2.决策树划分属性选择
3.连续属性的处理
4.缺失值的处理
5.剪枝处理
6.多变量决策树

二、决策树的生成
给定数据集D及属性集A,决策树的生成伪代码如下所示:
在这里插入图片描述
从决策树生成伪代码中我们可以看出树叶子节点的生成共有三种情况,分别对应第4、7及13行。因此对于决策树的生成,其主要的工作集中在最优属性的选择上了。
三、决策树划分属性选择
对于最优属性的选择,经典的共有三种方法:ID3、C4.5及CART。接下来我们将依次讲解三种方法的原理。
3.1. ID3方法
ID3方法是基于信息增益进行计算的,提及信息熵,我们知道她是表征无序状态的,即信息熵越大,越无序,也可以理解为信息熵越大,那么其不确定越大。给定一个随机变量X,其定义为:
在这里插入图片描述
那么我们选择的属性,如果能够让数据集划分的子集最纯(不确定最小),我们就可以认为该属性是当前情况下的最优划分属性。那么经过数学化抽象,我们假定选择的属性为Fx(取值为f1,f2,…,fr),根据不同取值划分为r个分支,每个分支样本集为D1,D2,…,Dr。首先我们知道未划分之前数据集的信息熵(不确定性)为:
在这里插入图片描述
其中C表示数据集D中含有的类别,p表示某个类别在数据集D中的概率。
那么根据某个属性Fx划分之后,整体的信息熵为:
在这里插入图片描述
那么根据某个属性Fx划分后的信息增益为:
在这里插入图片描述
我们选择的应该是使得信息增益更大的属性作为最优划分属性,因此信息增益表征的是 使其不确定性减少的程度。
3.2. C4.5方法
我们注意到ID3方法,比较偏向选择属性值更多的属性,比如一个样本集共有100个样本,其中有个属性ID,不同样本不同的ID,那么根据ID进行划分其信息增益肯定最大。所以为了解决这个问题,引入了C4.5方法,对ID3方法进行了补充,利用信息增益率进行划分,对更多的属性值进行了惩罚,如下所示:
在这里插入图片描述
在这里插入图片描述
正如前面提及到的,信息增益率会惩罚属性值多的属性,因此更偏向于属性值少的属性,所以C4.5算法中并不会简单只根据信息增益率进行最优属性的选择,而是会先选择信息增益较大的几个属性,然后从中选择信息增益率更大的属性作为最优划分属性。
3.3. CART方法
CART即分类回归树,不同于ID3和C4.5,该方法既可以用于分类也可用于回归问题,同时CART限制为二叉树,当用于分类问题,以Gini指数作为划分标准,当用于回归问题时,以均方误差为划分标准。
3.3.1. 分类问题
通过Gini指数进行属性划分,其定义为:
在这里插入图片描述
表征了从数据集D中任取两个样本,其类标记不一致的概率,因此Gini指数值越小,则划分后的纯度越高。
由于CART是一个二叉树,所以每次不仅仅需要选择最优属性,还需要选择最优属性下的最优划分点。因此每次需要计算不同属性Fx下的不同划分点Sx,计算其Gini指数,如下所示:
在这里插入图片描述
其中Left(Fx, Sx),Right(Fx, Sx)表示以属性Fx及划分点Sx划分后的左右区域。
3.3.2. 回归问题
对于回归问题,首先得到以属性Fx及划分点Sx划分后的左右区域Left(Fx, Sx),Right(Fx, Sx),然后分别计算左右区域中y值的平均值:
在这里插入图片描述
然后得到经过属性Fx及划分点Sx划分后的均方误差为:
在这里插入图片描述
然后选择均方误差最小的属性及划分点。
四、连续属性的处理
针对连续属性,一般采用的策略是二分法,例如一个连续属性Fx,其值为a1,a2,…,ap,那么二分法的处理策略为(以ID3为例):
[1].将其值升序排列
[2].得到每相邻两个值的均值t1,t2,…,tq作为划分候选点,易知 q = p - 1
[3].遍历所有的划分点,如果样本该属性大于划分点则划分到一个右子树,否则划分到左子树,计算得到不同划分点对应的信息增益,选择最大信息增益的划分点作为最终划分点。
这里需要注意的一点:对于连续属性,在这次经过了划分,该属性仍然参与下一次划分。
五、缺失值的处理
在现实场景中,一般都会有缺失的属性值,在缺失值的处理上,决策树需要解决两个问题(以ID3为例):
[1].如何找到最优划分属性
[2].如果一个样本在划分的属性上值为空,该样本应该归为哪个分支
针对第一个问题,对于每个属性,我们仅仅只考虑该属性值上不为空的样本,然后在不为空的样本进行信息增益的计算,但是在最后我们应该惩罚那些属性值缺失严重的属性,因此我们还需要乘以一个因子,即该属性值不为空的样本的占比。例如:现在有两个属性A和B,属性A不为空的样本占比为0.9,属性B不为空的样本占比为0.2,最后在属性A不为空的样本上计算得到的信息增益为0.12,在属性B不为空的样本上计算得到的信息增益为0.42,所以最终属性A的信息增益为0.90.12=0.108,属性B的信息增益为0.20.42=0.084,最后选择属性A作为划分属性。
针对第二个问题,在开始的时候我们将每个样本初始化一个权重1,在基于属性A划分时,若某个样本在属性A上值缺失,那么将其划分到所有分支,同时调整该样本在不同分支上的权重,那么如何调整了?我们一般认为某个分支划分的样本数越多,可能该样本更有可能进入到该分支上(从众心理。。。),所以权重跟分支样本数就建立了联系,只要将该样本的权重乘以对应分支样本数占比就可作为该样本新的权重。
六、剪枝处理
一般生成的决策树都会因为生成的树过于复杂,从而导致过拟合,所以一般对生成树进行剪枝处理,通常分为预剪枝及后剪枝。
5.1. 预剪枝
在树生成的过程中,我们同时进行预剪枝处理,对一些不利于泛化性能提升的划分,我们将进行剪枝处理,具体过程如下(以ID3方法为例):
[1].将数据集分为训练集T及验证集V两部分
[2].每次基于某个属性进行划分时,我们根据验证集V计算得到划分后的信息增益Gain_post,以及不划分时,而以当前样本最多数类为叶子节点类别时的信息增益Gain_pre,如果Gain_post > Gain_pre,则进行划分,否则不进行划分。
5.2. 后剪枝
在一棵完整的树生成之后,然后再进行由下而上的剪枝处理称为后剪枝,具体过程如下(以ID3为例):
[1].将数据集分为训练集T及验证集V两部分
[2].基于训练集T生成一棵完整的树,同时基于验证集V得到该树的分类准确率Accuracy
[3].由下而上找到树的第一个非叶子节点,若将其变成叶子节点,类别为其孩子中的最多数分类,基于验证集V计算其准确率Accuracy_clip,若Accuracy_clip > Accuracy,则进行剪枝处理。
5.3. 两种剪枝处理的比较
[1]. 预剪枝处理由于是在生成的过程进行剪枝处理,所以计算复杂度相比后剪枝处理要小。
[2]. 后剪枝处理由于生成了更多的分支,从而使得其效果要稍优于预剪枝处理的效果。
七、多变量决策树
在之前考虑的决策树算法中,我们如果将样本中的每个属性作为一个维度,我们每次的处理过程就是找到某个维度的垂线对属性组成的高维空间进行划分。这样处理的问题之前也考虑过,那就是增加了模型复杂度,容易过拟合,虽然可以通过剪枝处理缓和这种问题,但也会增加额外的时间消耗,那么还有其他的方案吗?多变量决策树便是一种巧妙的解决方案,我们不再以某一个属性为划分属性,而是以多个属性的线性组合作为划分属性,例如属性A和属性B的组合,wA+vB=t,若某个样本通过计算wA+vB <= t,则划分在左子树,否则划分到右子树。所以最终的问题就是如何找到一条线性分界面,这里有很多方法,比如我可以用Logistic分类,每次将某一个类作为正例,以其他类为负例,从而构建二分类线性分界面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值