机器学习之集成学习1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37960402/article/details/88426900

集成学习:

最直白的理解:人多力量大

  • 集成学习通过将多个学习器进行结合,从理论上来讲使用弱学习集成可以获得更好的性能。
  • 集成算法的两个主要问题:如何选择若干个体学习器,以及选择何种策略将这些个体学习器集成为一个强学习器。
  • 集成算法的成功在于保证个体学习器的多样性(好而不同),且集成不稳定的算法也能够得到一个比较明显的性能提升。

常见的集成学习有:

        Bagging:训练多个分类器取平均——用于减少方差

        Boosting: 从弱分类器开始加强,新分类器一定更强——用于减少偏差

        Stacking:聚合多个分类和回归模型——用于提升预测结果

在这里插入图片描述

1、boosting算法

boosting算法是一族可将弱分类器提升为强分类器的算法。算法的工作机制类似:先从初始训练集训练出一个基分类器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器分错的样本在后续受到更多的关注,然后基于整理后的样本分布来训练下一个基学习器;反复进行,直至基学习器的数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
Boosting算法包括:Adaboost、GB、GBDT与XGBoost,其中最出名的就是Adaboost

1.1Adaboost算法

设训练数据集T={(x1,y1), (x2,y2)…(xN,yN)}
初始化训练数据的权值分布
在这里插入图片描述
使用具有权值分布Dm的训练数据集学习,得到基本分类器Gm


在这里插入图片描述

计算Gm(x)在训练数据集上的分类误差率


在这里插入图片描述

计算Gm(x)的系数


在这里插入图片描述

更新训练数据集的权值分布


在这里插入图片描述

这里,Zm是规范化因子,它的目的仅仅是使Dm+1成为一个概率分布


在这里插入图片描述
在这里插入图片描述

构建基本分类器的线性组合


在这里插入图片描述

得到最终分类器


在这里插入图片描述

看不懂以上公式也没关系,下面将举一个例子:
如果想看该例子(adaboost)的程序,可以点这里
给定下列训练样本,试用AdaBoost算法学习一个强分类器。
在这里插入图片描述

初始化训练数据的权值分布:W1i= 0.1


在这里插入图片描述

第一个m=1
在权值分布为D1的训练数据上,阈值v取2.5时误差率最低,故基本分类器为:


在这里插入图片描述

在这里插入图片描述
G1(x)在训练数据集上的误差率e1=P(G1(xi)≠yi) =0.3
计算G1的系数:


在这里插入图片描述

f1(x)=0.4236*G1(x)
分类器sign(f1(x))在训练数据集上有3个误分类点
更新训练数据的权值分布:


在这里插入图片描述

D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715,0.1666, 0.1666, 0.1666, 0.0715)

第二个m=2
在权值分布为D2的训练数据上,阈值v取8.5时误差率最低,故基本分类器为:


在这里插入图片描述

在这里插入图片描述
G2(x)在训练数据集上的误差率e2=P(G2(xi)≠yi) = 0.2143(0.0715*3)
计算G2的系数:


在这里插入图片描述

更新训练数据的权值分布:


在这里插入图片描述

D3=(0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667,0.1060, 0.1060, 0.1060, 0.0455)
f2(x)=0.4236G1(x) + 0.6496G2(x)
分类器sign(f2(x))在训练数据集上有3个误分类点

第三个m=3
在权值分布为D3的训练数据上,阈值v取5.5时误差率最低,故基本分类器为:


在这里插入图片描述

在这里插入图片描述
G3(x)在训练数据集上的误差率e3=P(G3(xi)≠yi) = 0.1820(0.0455*4)
计算G3的系数:


在这里插入图片描述

更新训练数据的权值分布:


在这里插入图片描述

D4=(0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065,0.065, 0.065, 0.125)
f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)
分类器sign(f3(x))在训练数据集上有0个误分类点

1.2GB( Gradient boosting)提升树算法

提升树是以分类树或者回归树为基本分类器的提升方法,他们根据分类问题不同称为二叉分类树或者二叉回归树,采用加法模型(基函数的线性组合)与前向分布算法。提升树被认为是统计学习中性能最好的方法之一。

当前的基决策树表示
设x为输入空间(输入样本),y为输出空间,如果将输入空间x划为j个不相交的区域R1,R2…,每个区域上有确定输出的常量cj(每一个x都只有唯一一个输出的值),那么树可以表示:


在这里插入图片描述

当前决策树的表示
提升树的思想是迭代生多个(M个)弱的模型,当前模型fm(x)的生成基于前面学习模型的fm-1(x):


在这里插入图片描述

这里的主要问题就是如果确定当前基决策树就是最优的决策树啦,只有基决策树最优,才能达到当前的决策树最优,所以问题转化为:

在这里插入图片描述

提升树算法的不同主要是在于使用的损失函数不同:平方误差损失函数的回归问题,指数损失函数的分类问题,以及一般损失函数的一般决策问题。
以下都是回归问题的提升树

在这里插入图片描述

同样将问题转化为求θ,θ就是最优的划分点


在这里插入图片描述

当采用平方误差求损失时L(y,f(x))=(y-f(x))2,其损失变为:


在这里插入图片描述

r就表示当前模型的残差,就是正确的结果减去预测结果的值


在这里插入图片描述

算法步骤:
训练数据集(x,y)
(1) 初始化f0(×)=0
(2)对m=1,2,3…M
(a)计算残差r
(b)拟合残差rmi学习一个回归树,得到基决策树T
©更新fm(x)=fm-1(x)+T
(3)得到回归问题提升树
总结一下呢就是先在正确的结果上求出第一个最优划分的决策树,用正确的结果减去预测的结果得到残差,然后再在残差的结果上求下一棵决策树,以此类推。
例子:
学习这个回归问题的提升树模型,考虑只用树桩作为基函数
在这里插入图片描述
第一个基函数T1:
最开始的模型残差就是yi
首先基于回归问题,先求出所有的候选点,这些都是θ的候选值,记为s:
1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5
将候选点左边的记为R1,候选点右边的记为R2,其中:


在这里插入图片描述

那么可以将回归树T转化为整体的loss最小:


在这里插入图片描述

那么上面的公式就是要求的最优的C1和C2值


在这里插入图片描述
在这里插入图片描述

求导数,约掉1/2,得到最优的C1,C2做法类似


在这里插入图片描述

依次遍历前面的候选点,当s=1.5,R1={1},R2={2,3,…10},C1=5.56,C2=7.50
得到误差


在这里插入图片描述

将所有点求出误差:
在这里插入图片描述
由表中可知:当s=6.5时m(s)值最小,此时c1=6.24,c2=8.91,第一课回归树为


在这里插入图片描述

残差r=yi-f1(xi),求的残差为:
在这里插入图片描述
所以用f1拟合的训练数据平方误差损失为1.93,θ=6.5

第二个基函数T2
T2与T1一样,只是拟合的数据是上面的残差表,得到T2和f2


在这里插入图片描述

用f2拟合数据的平方损失误差为


在这里插入图片描述

继而求得


在这里插入图片描述
在这里插入图片描述

用f6拟合的训练数据的平方损失误差是0.17
这时候已经满足误差要求,那么f(x)=f6(xi)就是所求的提升树

1.3XGboost

Xgboost是GB算法的高效实现,xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)。xgboost在目标函数中显示的加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。
目标函数公式:


在这里插入图片描述
在这里插入图片描述

根据泰勒公式:


在这里插入图片描述

得到一阶导和二阶导:


在这里插入图片描述

带入泰勒公式:


在这里插入图片描述

以下公式是目标函数的计算


在这里插入图片描述
在这里插入图片描述

1.4、Adaboost、GB、GBDT与XGBoost几种算法的比较

1、Adaboost
AdaBoost开始时所有样本的权重相同,训练得到第一个基分类器。从第二轮开始,Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。

2、GB
Gradient Boost每一次的计算是为了减少上一次的残差(residual),而为了消除残差,因此在残差减少的梯度(Gradient)方向上建立一个新的模型。在GB中每个新的模型的建立是为了使得之前模型的残差往梯度方向减少。

3、GBDT
GBDT即梯度提升树,是GB和DT的结合。这里的决策树是回归树,GBDT中的决策树是个弱模型,深度较小一般不会超过5,叶子节点的数量也不会超过10,对于生成的每棵决策树乘上比较小的缩减系数(学习率<0.1),有些GBDT的实现加入了随机抽样(subsample 0.5<=f <=0.8)提高模型的泛化能力。通过交叉验证的方法选择最优的参数。

4、Xgboost
Xgboost是GB算法的高效实现,xgboost中的基学习器除了可以是CART也可以是线性分类器。

  • xgboost在目标函数中加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。

  • GB中使用Loss Function对f(x)的一阶导数计算出伪残差用于学习生成fm(x),xgboost不仅使用到了一阶导数,还使用二阶导数。

  • CART回归树中寻找最佳分割点的衡量标准是最小化均方差,xgboost寻找分割点的标准是最大化,lamda,gama与正则化项相关。
    XGboos训练速度快的原因:

  • 使用了并行/多核计算

  • 原生语言为C++

5、XGBOOST和GBDT的区别

  • 传统GBDT梯度提升决策树算法以CART作为基分类器,而XGBoost还支持线性分类器(gblinear)。
  • 传统GBDT在优化时只用到一阶导数信息,xgboost同时用到了一阶和二阶导数。二阶导数有利于梯度下降的更快更准,能够在训练集上收敛得更快。
  • xgb比gbdt好的地方:
    二阶泰勒展开
    节点分数惩罚
    增益计算不同,gbdt是gini,xgb是优化推导公式

6、GBDT怎样设置单棵树的停止生长条件?
节点分裂时的最小样本数
树的最大深度
最多叶子结点数
Loss满足约束条件

7、GBDT如何评估特征的权重大小?
(1)通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值。
(2)借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值。

2、bagging算法

2.1 bagging算法基本思想
为了使基学习器尽可能的具有较大的差异(好而不同),对训练样本进行采样以产生若干个不同的子集,对每一个子集训练一个基学习器,然后结合策略进行集成的方法。为了不让每个基学习器效果太差,这些子集不能完全不同,因此使用子集之间相互有交叠的采样方法,即bootstrap方法。

2.2 bagging基本流程
给定包含m个样本的数据集,随机取出一个样本放入采样集中,再把它放回到原始数据集中,重复m次,得到含m个样本的采样集,进行同样的操作进行T次得到T个每个含m个样本的采样集,基于每个采样集训练一个基学习器,再将基学习器进行组合,一般使用多数投票或求均值的方式来统计最终的分类结果。
在这里插入图片描述
Bagging方法的基学习器可以是基本的算法模型,如:Linear、Ridge、Lasso、Logistic、Softmax、ID3、C4.5、CART、SVM、kNN等。

3、随机森林(Random Forest,RF)

它是Bagging算法的进化版,对bagging进行了改进。

  • 从样本集中用Bootstrap采样选出n个样本;
  • 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
  • 重复以上两个步骤m次,即建立了m棵CART决策树
  • 这m棵CART决策树形成随机森林,通过投票表决结果,决定数据属于哪一类

随机森林的随机体现在哪?
第一点:体现在样本的选择是随机的
第二点:体现在特征的选择是随机的

4 问题

4.1GBDT和随机森林比较

GBDT和随机森林的相同点:

  • 都是由多棵树组成
  • 最终的结果都是由多棵树一起决定

GBDT和随机森林的不同点:

  • 组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成
  • 组成随机森林的树可以并行生成;而GBDT只能是串行生成
  • 对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来
  • 随机森林对异常值不敏感,GBDT对异常值非常敏感 5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成
  • 随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能

4.2分类树和回归树的区别

分类树使用信息增益或者增益比率来划分节点;每个节点样本的类别投票决定测试样本的类别
回归树使用最小化均方差划分节点;每个节点样本的均值作为测试样本的回归预测值

4.3boosting算法主要思考的是哪两个问题?

第一:每一轮如何改变训练数据的权值和概率分布;
第二:如何将弱分类器组合成一个强分类器

关于这两点:
adaboost做法是(1)提高那些前一轮被错误分类的样本权值,降低那些前一轮被争取分类的样本权值,使错分类样本得到更大的关注。(2)采用加权多数表决方法,少数服从多数。
提升算法做法是(1)利用上一个基决策树残差求出当前基决策树,(2)利用当前决策树求出结果,注意当前基决策树不是当前决策树

猜你喜欢

转载自blog.csdn.net/qq_37960402/article/details/88426900