ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习深版04:提升

2020-12-07 16:59:29  阅读:216  来源: 互联网

标签:机器 函数 04 树结构 模型 损失 GBDT 深版 节点


机器学习深版04:提升(Boosting)

文章目录


参考文章:

  1. https://www.cnblogs.com/jiangxinyang/p/9236385.html
  2. https://www.cnblogs.com/jiangxinyang/p/9248154.html

1. 分析随机森林的特点

问题思考:
在这里插入图片描述

2. 提升

1. 概念

提升是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升
如果存在弱分类器,则可以通过提升的办法得到强分类器。

相比于Bagging对样本进行处理,我们想通过另一个方法Boost。

3. GBDT 梯度提升决策树

GBDT是梯度提升决策树(Gradient Boosting Decision Tree)的简称,GBDT可以说是最好的机器学习算法之一。GBDT分类和回归时的基学习器都是CART回归树,因为是拟合残差的。
用于一个简单的例子来说明GBDT,假如某人的年龄为30岁,第一次用20岁去拟合,发现损失还有10岁,第二次用6岁去拟合10岁,发现损失还有4岁,第三次用3岁去拟合4岁,依次下去直到损失在我们可接受范围内。
以平方误差损失函数的回归问题为例,来看看以损失来拟合是个什么样子,采用前向分布算法:
在这里插入图片描述

4. XGBoost算法推导

事实上对于树模型为基学习器的集成方法在建模过程中可以分为两个步骤:一是确定树模型的结构,二是确定树模型的叶子节点中的输出值。

1. 定义树的复杂度

首先把树拆分成结构部分q和叶子节点输出值w,在这里w是一个向量,表示各叶子节点中的输出值。在这里就囊括了上面提到的两点,确定树结构q和叶子结点的输出值w。从下图中可以看出,q(x)实际上是确定输入值最终会落到哪个叶子节点上,而w将会给出相应的输出值。
在这里插入图片描述
具体表现示例如下,引入正则化项 Ω(ft)来控制树的复杂度,从而实现有效的控制模型的过拟合,这是xgboost中的第一个重要点。式子中的T为叶子节点数
在这里插入图片描述

2. XGBoost中的Boosting Tree模型

在这里插入图片描述
和GBDT方法一样,XGBoost的提升模型也是采用残差,不同的是分裂结点选取的时候不一定是最小平方损失,其损失函数如下,较GBDT其根据树模型的复杂度加入了一项正则化项:
在这里插入图片描述

3. 对目标函数进行改写

在这里插入图片描述
上面的式子是通过泰勒展开式将损失函数展开为具有二阶导的平方函数。
在GBDT中我们通过求损失函数的负梯度(一阶导数),利用负梯度替代残差来拟合树模型。在XGBoost中直接用泰勒展开式将损失函数展开成二项式函数(前提是损失函数一阶、二阶都连续可导,而且在这里计算一阶导和二阶导时可以并行计算),假设此时我们定义好了树的结构(在后面介绍,和GBDT中直接用残差拟合不同),假设我们的叶节点区域为:
在这里插入图片描述
上面式子中i代表样本i,j代表叶子节点j。
 则我们的目标优化函数可以转换成(因为l(yi,yt−1i)是个已经确定的常数,可以舍去):
在这里插入图片描述

4. 树结构的打分函数

上面的Obj值代表当指定一个树结构时,在目标上面最多减少多少我们可以把它称为结构分数。可以认为这是一个类似与基尼指数一样更一般的对树结构进行打分的函数。如下面的例子所示。
在这里插入图片描述
对于求得Obj分数最小的树结构,我们可以枚举所有的可能性,然后对比结构分数来获得最优的树结构,然而这种方法计算消耗太大,更常用的是贪心法(事实上绝大多数树模型都是这样的,只考虑当前节点的划分最优),每次尝试对已经存在的叶节点(最开始的叶节点是根节点)进行分割,然后获得分割后的增益为
在这里插入图片描述
在这里以Gain作为判断是否分割的条件,这里的Gain可以看作是未分割前的Obj减去分割后的左右Obj,因此如果Gain<0,则此叶节点不做分割,然而这样对于每次分割还是需要列出所有的分割方案(对于特征的值的个数为n时,总共有2^n - 2 种划分)。而实际中是采用近似贪心方法,我们先将所有样本按照gi从小到大排序,然后进行遍历,查看每个节点是否需要分割(对于特征的值的个数为n时,总共有n−1种划分),具体示例如下:
在这里插入图片描述
最简单的树结构就是一个节点的树。我们可以算出这棵单节点的树的好坏程度obj*。假设我们现在想按照年龄将这棵单节点树进行分叉,我们需要知道:

1)按照年龄分是否有效,也就是是否减少了obj的值

2)如果可分,那么以哪个年龄值来分。

此时我们就是先将年龄特征从小到大排好序,然后再从左到右遍历分割

这样的分割方式,我们就只要对样本扫描一遍,就可以分割出GL,GR,然后根据Gain的分数进行分割,极大地节省了时间。所以从这里看,XGBoost中从新定义了一个划分属性,也就是这里的Gain,而这个划分属性的计算是由其目标损失决定obj的。

5. Adaboost算法

1. 公式推导

样本加权值。
初始权值分布如下:

在这里插入图片描述
引入分类误差率:
在这里插入图片描述
分类误差率一般大于0,做错的话exp后面的地方将会大于一,从而实现预测错误,权值增大。
在这里插入图片描述

2.举例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时,f3(x)已经在训练集上正确率达到百分百了。

3. 为什么结果会收敛

只要能证明他的误差上限是0,即可证明。

4. 一种理解方式

在这里插入图片描述

6. 方差与偏差

当我们的模型表现不佳时,通常是出现两种问题,一种是 高偏差 问题,另一种是 高方差 问题。识别它们有助于选择正确的优化方式,所以我们先来看下 偏差 与 方差 的意义。

  • 偏差: 描述模型输出结果的期望与样本真实结果的差距。
  • 方差: 描述模型对于给定值的输出稳定性。
    在这里插入图片描述

7.补充:目标函数的组成

目标函数是最终需要优化的函数,其中包括经验损失和结构损失
obj=loss+Ω
经验损失(loss)就是传说中的损失函数或者代价函数。结构损失(Ω)就是正则项之类的来控制模型复杂程度的函数。

标签:机器,函数,04,树结构,模型,损失,GBDT,深版,节点
来源: https://blog.csdn.net/fafagege11520/article/details/110790781

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有