机器学习技法------Blending and Bagging

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

Blending

在训练样本中学习得到若干个gt
G= 1/T ∑ t gt
在这里插入图片描述
则:
在这里插入图片描述

此时是对于一个样本x 如果是对于所有的样本那么就变成了
avg(Eout(gt))= avg(ε(gt-G)2)+Eout(G)
此时可以看做
Eout(G) 代表多个g和真正分布之间的差距 叫做bias
而 gt 和G之间的差距称作 variance

对于回归问题而言 blending for regression 需要优化的目标函数为
在这里插入图片描述

仔细观察 其实可以将其理解为特征空间转化之后的线性回归问题 即
在这里插入图片描述
这里的i代表的是特征转换之后的特征维度的大小
这里做的特征转化 Φ(xn)=(g1(xn),g2(xn),g3(xn)…gn(xn))

那么在实际的使用过程中 首先使用训练样本Dtrain训练得到若干个 g1-,g2-,…gn-,然后将验证集中的数据Dval 通过上述所得的g-进行转化 由(xn,yn) 转化为 (zn,yn) 其中zn=(g1-(xn),g2-(xn),g3-(xn)…)
在这里插入图片描述
注意回传的时候传回的是正常的g而非 g-

同时不一定非要使用线性的Blending,如果使用非线性的模型做blending 则称为stacking
在这里插入图片描述

而对于blending 无论是给每一个hypothesis 一个固定的权重(voting,average)的uniform blending 还是使用线性模型组合的linear blending 或者使用非线性模型进行的stacking ,其前提条件都是我们已经有了一系列的hypothesis 我们使用g表示,那么能不能通过一遍学习得到g一边将g就行组合呢?

下面是可能得到不同的g
在这里插入图片描述

那我们接下来想要得到的是对于我们手上固定的训练样本 如何通过这些训练样本得到若干个不同的g
这时需要引入bootstrap的概念
bootstrap 要做的是在训练样本D中每次有放回的区N笔资料 这里选取N笔资料所有可能性为NN
使用bootstrap得到的不同样本 训练不同的hypothesis 可得不同hypothesis

在这里插入图片描述

Bagging

使用bagging的时候需要通过bootstrap的方式对数据集进行有放回的抽样 从而得到不同的训练样本 进而得到不同的hypothesis
例如:
在这里插入图片描述
我们在boostrap之后得是数据集Dt
通过该数据集 可以计算此时的Ein=1/N ∑ t [[ f(xt)!=yt]]
因为在bootstrap之后的数据中(x1,y1)出现了两次 所以我们不妨将上述式子改写成带权重的形式
在这里插入图片描述

对于第t轮 若犯错误的比例为ε (因为对于随机选择二分类错误率为1/2 所以这里我们假定 犯错比例低于1/2) 那么正确的比例为(1-ε), 将犯错的样本对应的权重乘上(1-ε) 正确样本对应权重乘上ε
在这里插入图片描述
进一步我们定义一个放缩的变量
在这里插入图片描述
对于错误的样本权重乘上这个放缩变量,对于正确的样本权重除以这个放缩变量

Adaptive Boosting Algorithm

在这里插入图片描述

  1. 初始化 ui=1/N 其中N为样本的数量 得到第一个g1
  2. 通过当前的D以及ut 训练得到当前的gt
  3. 更新ut
    最终通过不同的权重将不同的g进行连接 可想而知 对于效果好的g当然要给定一个较大的权重 但是如何区分该g的好坏呢
    一个很简单的方法就是通过对应g的错误 即εt ,如果εt很小 ,方块t就会很大,说明g效果好 所以可以给α赋值一个 ε的单调函数 这里使用的是ln 函数
    在这里插入图片描述

整体的Adaboost流程如下
在这里插入图片描述

由此可见对于Adaboost算法框架 只需要给它提供一个弱演算法(比随机猜强一点的演算法 为了保证最开始的错误率小于1/2)就可以通过Adaboost得到一个较为不错的结果。

猜你喜欢

转载自blog.csdn.net/a940902940902/article/details/86062825