集成学习boosting和bagging

思想:通过构建并结合多个学习器来完成学习任务

强学习器:如神经网络等,需要大量的数据,以及较高的服务器性能等,一般来说准确性很高。
弱学习器:如果决策树、逻辑回归等,模型简单,一般准确性一般。
通过组合多个弱学习器来达提高模型性能。

需要关注的问题

1.个体学习器如何训练获得
让单一的每个弱学习器去学习不一样的数据。
改变训练数据的权值或者概率分布。增大学习数据里面某些数据被学习的权重的
2.如何组合各个弱学习器

boosting 和 bagging
boosting

boosting:个体学习器之间存在强依赖关系,必须串行生成的序列方法。(串行)
如何改变训练数据的学习权重:
提高那些在前一轮被弱分类器分错的样本的权值
建设那些在前一轮被弱分类器分对的样本的权值
简单来说,就关注错题
如何组合的每个弱分类器:
使用加法模型将这些弱分类器进行组合。
如adaboost、GBDT、xgboost、lightgbm、catboost

bagging

bagging:个体学习器之间不存在强依赖的关系,可同时生成的并行化方法。(并行)
如何改变训练数据的学习权重:
每轮从原始的样本集中使用Bootstraping方法(即自助法,是一种有放回的抽样方法,可能抽到重复样本)
每轮抽n个训练样本(在训练集中,有些样本可能被多次抽到,而有些样本可能一次都没被抽中)
共进行k轮抽取,得到k个训练集,k个训练集相互独立。
在随机森林中,还会随机抽取一定数量的特征。
举例:
集成学习boosting和bagging_第1张图片
随机抽取两个特征,和两个数据作为一个数据集。
k个训练集分别进行训练得到k个模型,体现并行。
如何组合的每个弱分类器:
分类问题:k个模型采用投票的方式得到分类结果
回归问题:计算k个模型的均值作为最后的结果
如随机森林。

Adaboost算法
解决的问题

adaboost解决二分类问题

思路

1.在每一轮中训练中,记录好那些被【当前弱分类器】【正确分类】和【错误分类】的样本,在一轮训练的时候,提高【错误分类样本】的权值,同时降低【正确分类样本】的权值,用以训练新的弱分类器,这样一来,那些没有得到正确分类的数据,由于其权重加大,在下一次训练中会受到更多的关注。
如何理解样本的权值:
如图所示:
集成学习boosting和bagging_第2张图片
原来有三个样本,第一个若分类器在训练中,都是没有权重调整的,都是三分之1.
假设第一个弱分类器在学习完之后,可以将第二个和第三个样本正确分类,那么第一个样本则分错了,那么需要提高第一个样本的权值。
相当于增加了第一个样本的数量

数学表达式

f ( x ) = ∑ m = 1 M α m G m ( x ) = α 1 G 1 ( x ) + . . . . . . . + α m G m ( x ) f(x)=\sum_{m=1}^{M}\alpha_mG_m(x)=\alpha_1G_1(x)+.......+\alpha_mG_m(x) f(x)=m=1MαmGm(x)=α1G1(x)+.......+αmGm(x)
其中 G m ( x ) 、 α G_m(x)、\alpha Gm(x)α分别代表每个弱分类器和每个弱分类器的权重。 α \alpha α由分类误差率来决定。加大【分类误差率小】的模型权重,使得其在表决中起较大作用。减小【分类误差率大】的模型的权重,使得其在表决中起较小作用。

算法流程

循环M次
1.初始化/更新当前【训练数据的权值分布】
如果是第一次训练,那么则初始化,每个样本的权值是 1 N \frac{1}{N} N1,N是数据集的大小。
如果不算第一次训练,那么则应该更新
集成学习boosting和bagging_第3张图片
D m D_m Dm代表第m个弱分类器的样本的权值
集成学习boosting和bagging_第4张图片
分类正确的时候,e上面带负号。减小权重。
分类错误的时候,e上面是正号。增加权重。
2.训练当前的基分类器Gm(x)
3.计算当前基分类器的权值 α m \alpha_m αm
α m \alpha_m αm与分类误差率 e m e_m em有关,等于分类错误的样本的权重之和。 0 ≤ e m ≤ 0.5 0\leq e_m\leq0.5 0em0.5因为错的太离谱的化可以反过来。
α m \alpha_m αm e m e_m em呈反比的关系,所以
α m \alpha_m αm= 1 2 l o g 1 − e m e m \frac{1}{2}log\frac{1-e_m}{e_m} 21logem1em
4.将amGm(x)更新到加法模型f(x)中
5.判断是否满足循环退出条件
1.分类器的个数是否达到M个
2.总分类器f(x)的误差率是否低于设定的精度
f(x)最后算出来是一个树,通过一个阈值来决定是正类还是负类。

训练方法

前向分布算法:
集成学习boosting和bagging_第5张图片
使用梯度下降算法会导致参数过多的问题。这里使用前向分布算法,各个击破去优化, f m − 1 ( x i ) f_{m-1}(x_i) fm1(xi)这里是一个定值。
传统的梯度下降表达如下:
集成学习boosting和bagging_第6张图片
直接梯度下降会导致参数过多,前向分布算法充分利用上一轮的结果。

你可能感兴趣的:(机器学习,集成学习,boosting)