决策树过拟合现象_决策树、随机森林、boosting

本文详细介绍了决策树算法,包括ID3、C4.5和CART,以及它们如何处理过拟合问题。讨论了信息增益与基尼指数的区别,并阐述了决策树的预剪枝和后剪枝策略。接着,文章转向随机森林,解释了其减少过拟合的原理。然后,介绍了Adaboost和梯度提升回归树(GBDT)的工作机制。最后,提到了XGBoost的优化特点,如正则项、列抽样和并行计算,以及如何处理缺失值。
摘要由CSDN通过智能技术生成

95819ae73b580469b8d0bae1ec54606d.png

一、决策树

决策树(decision tree)是一个树结构的算法,每一个非叶节点代表一个特征属性上的测试,每一个分支代表在该特征属性上的输出,每一个也节点存放一个类别。

决策树算法总结:

  • 结点和有向边组成。
  • 结点包含内部结点和叶结点两种类型。
  • 内部结点表示一个特征,叶结点表示一个类。

d3f30498d84a0565c9db50544f4ce17c.png

决策树算法的目的其实是选择最优的划分属性,提高划分后,分支结点的“纯度”,最常见的有算法ID3、C4.5和CART算法。

ID3

在ID3算法中,我们通常采用信息增益来衡量结果的“纯度”,我们通常选择信息增益最大的那个特征进行化分。

信息增益的定义:

  • 当集合样本
    中的第
    类样本的比例为
    ,我们可以定义信息熵为:

  • 划分属性
    中可能的取值
    ,属性
    取值为
    的样本集合,记为
  • 属性
    对样本
    划分后的信息增益为:

ID3算法的属性划分的度量方式就是信息增益, 一般而言,信息增益越大,那么就意味着使用属性

进行划分的“纯度”提升越大,因此,需要遍历所有的属性并计算相应的信息增益,将离散属性信息增益最大的作为划分属性。

C4.5

ID3算法中,当

的取值越多,信息增益越大,算法倾向于选择取值多的属性作为最终的划分属性,这样的划分不具备良好的泛化能力。在C4.5算法中我们的度量方式做了一些修改,选择使用信息增益率作为度量:

称为属性的固有值,当
的取值越多,其值越大,因此能对信息增益起到平衡的作用;然而信息增益率对取值较少的属性有偏好,因此有一个比较合理的规则:先从候选的划分属性中选取高于平均信息增益的属性,然后在选择信息增益率最高的。

CART

在CART(classification and regression trees)算法中,选用Gini Index作为划分属性的度量指标:

基尼指数反映的是随机抽取两个样本,划分的类别和真实类别不一样的概率,基尼系数越小,划分的纯度越高。

对于属性

进行划分,那么基于
的基尼指数定义为:

在迭代的过程中,我们应该划分使得基尼指数最小的属性。

信息增益与基尼指数的特点

  1. 信息增益能够将样本中数据量较多的类平衡的分布在叶子结点。
  2. 基尼指数倾向于将样本中数据量多的类划分至少数的叶子结点中。
  3. 基尼指数计算量相对于信息增益小,速度较快。

决策树的正则化

基于训练数据生成的决策树,如果不增加任何限制,任其肆意生长的话,那么拟合训练数据甚至达到100%,从而造成数据过拟合现象,且不具备泛化能力。

  • 预剪枝:对于每个结点进行划分验证,若划分后在验证集上没有泛化能力,则停止划分并将该结点定义成叶结点。
  • 后剪枝:先从训练集中生成一颗完整的树,自底向上对非叶结点进行泛化能力考察,若将该结点对应的子树替换成叶子结点能够提高泛化能力,这用叶子结点替换当前的子树,否则不剪枝。

预/后剪枝的优缺点:

  • 预剪枝能够抑制很多分支的展开,降低了模型过拟合的风险同时也提升了训练速度,但却存在欠拟合的风险。预剪枝是一种“贪心”算法,往往到达的是局部最优解而不是全局最优解。
  • 后剪枝相较于预剪枝保留了更多的分支,能够使得模型欠拟合的风险降低,泛化能力往往由于预剪枝。但由于需要生成完整的一棵树,剪枝的过程需要花费更多的时间,在数据纬度过大时,后剪枝是不现实的。

二、随机森林

由于单棵随机树容易过拟合的现象,我们可以将多棵树组合在一个称之为随机森林(random forest)。

  • 构建树时对训练集进行随机抽样。
  • 分割结点的时候考虑特征的随机子集。

随机抽样训练观测数据

在构建没棵树的时候,随机从训练数据中有放回地抽样等量数据用来训练每棵树,这个过程叫做bootstraping,这就意味着每棵树在训练的时候都可能用到相同一部分样本,背后的思想思想其实是在减少bias的情况下,每棵树相对于整个训练集上有比较大的方差,但是整个森林的结果会具有比较低的方差。

用于拆分结点的特征随机子集

随机森林的另外一个思想就是随机选取特征集合的一个子集进行子结点的划分。比如数据的特征有16个,初始设置的特征采样是

,那么每次划分子结点的时候,只考虑其中随机的4个特征。

三、提升算法Adaboost

Adaboost是由多个弱分类器组成一个强分类器,通过前向贪心算法最小化损失函数得到,每一次迭代都在改变训练样本的权重分布减少训练误差,分类器的误差率越小,权重越大,且上一轮分错的样本在下一轮中会获得更大的权重。具体的步骤如下:

  1. 初始化训练样本的权重
  2. 根据初始化权重的训练样本学习一个基分类器
    (二分类为例):
  3. 计算基分类器
    的误差率
    :
    并更则基分类器
    的权重
  4. 更新训练样本的权重
  5. 按照上述方法迭代产生
    个基分类器
  6. 最终的分类器定义为
  7. 损失函数为:

四、梯度提升回归树GBDT

GBDT(Gradient Boosting Decision Trees)是以CART回归树为基函数的boosting集成算法,第j轮是对前j-1棵树的残差进行拟合,新一轮的强分类器等于前一轮强分类器加上新的弱分类器。

假设

以及对应的损失函数为

首先选择一个CART决策树使得

for

do:

1. 计算负梯度 w.r.t

:

2. 利用CART决策树

来拟合
.

3. 利用linear search 的方法计算multiplier

:

4. 更新模型为:

end

return

GBDT在每一次迭代中,算法使用前一时刻的模型

与标签
之间的负梯度
对CART决策树弱学习器
进行训练,从而得到更强的抢学习器

五、XGboost

GBDT是通过一阶负梯度进行梯度下降,XGBoost这是对二阶导数的信息来指导弱学习器
的训练,这样有助于提升训练的收敛速度,同时增加了正则项来惩罚树的数量和决策。树的权重:

首先将损失函数二阶展开,有:

对于

我们可以令

上式可以保证每一步损失函数在二阶近似上取得极小值。另外我们可以将

表示成
其中,
表示将d维的特征映射到对应的某个叶子上
,
上,即
,从而有
。我们令
为落在叶子
,
上的样本的集合,则
中的样本都被预测为
, 有

损失函数可以写成:

XGB的差别和优势

  1. XGB优化代价函数时,利用了一阶和二阶梯度,提高了精度,同时可以自定义损失函数。
  2. 增加了正则项,可以控制模型的复杂度,包含叶子结点的数目和叶结点的权重。
  3. 可以支持列抽样,在迭代过程中抽取部分数据进行学习。
  4. 稀疏感知,可以忽略缺失值,或者将缺失指定分类结点,提高计算速度。
  5. 对于新加入模型的决策树乘以一个学习率,学习率越小,需要的树越多。
  6. 可支持线性分类器,灵活性强。
  7. 利用块结构进行并行计算。

参考文献:

  • Linghan Zhang:Gradient Boosting梯度提升-GBDT与XGBoost解析及应用
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值