林轩田之机器学习课程笔记( combining predictive features之 adaptive boosting)(32之24)

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
对于模型融合可以参考:
http://scikit-learn.org/stable/modules/ensemble.html
Adapitve boosting的参考:
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html
题目可能不全,因为有字数限制,不好意思,可以参考:
https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/

概要

上节讲到了blending和bagging,通过一堆基本模型得到一个还不错的模型,要得到基本模型提出了通过放回抽样的方法,得到bagging。本节主要讲通过另外的方法达到模型的多样性。

为什么要做boosting

我们首先来看看一个例子,比如在分辨是否是苹果的过程中,老师给了一堆水果给全班童鞋辨识,整个的辨识过程如下图:
这里写图片描述
通过上面的学习过程,同学们就学习到了,苹果可能是圆的,是红的…….。将这些规则组合起来就可能还不错的基本模型。

这就是adaptive boosting算法的流程,核心在于基本分类器在不断的学习过程中,专注在错误的样本上,调整相应权重,给予下一次的基本分类器学习。

比如现在只能给予基分类器垂直线,那么会得到什么结果呢?
如下图:
这里写图片描述
最后可能就得到这些弯弯曲曲的线条,将数据分割开。

通过调整权重达到模型多样性

我们先看看通过拔靴法得到bagging方法如下图:
这里写图片描述
当采用放回抽样的时候,数据的有的会有重复,有的会没有,其实这个和在该点添加相关的整数权重什么分别。
所以采用放回抽样的方式本质上是一种通过调节资料点权重的方式

而我们知道,抽样的话,权重是整数的,可不可以权重是正实数,这样灵活性更高,就像计算阶乘,整数的阶乘是可以很好计算的,那么要计算一个小数的阶乘呢?是吧

通过调整权重得到的样本最后的损失函数如下:

Euin=1Nn=1Nunerr(yn,h(xn))

实际的模型中怎么做到这种随心权重呢?在SVM和逻辑回归中如何做呢?
这里写图片描述
1)在soft-margin的SVM中,超参数C前面添加权重就可以了。然后通过对偶方式求解。
2)对于通过SGD方式进行优化的算法,比如逻辑回归等,可以在抽样的时候通过概率分布来做到,给予该点抽样概率。

其实在处理类别不平衡的方法中,其中一种方法就是修改损失函数类别权重。而这里是通过修改每个点的权重,就相当于是以前的一种衍生。

那么我们如何修改这些权重,使得我们的算法越来越好呢?每个基模型差异性比较大。考虑做一个二分类模型,算法迭代到了t轮以及t+1轮。

gt=argminhH(n=1Nutn[ynh(xn)])gt+1=argminhH(n=1Nut+1n[ynh(xn)])

我们的目的是要使得算法的差异性比较大,这样最后模型模型提升效果才明显。那怎么做呢?假如经过t轮后,给予后面资料点的权重,使得 gt 模型在下一次加权后的数据上表现很差是不是就可以了?

gt ut+1n 赋予的权重下表现差,而 gt+1 表现好啊
怎么才叫做表现差呢?如果 gt ut+1n 赋予的权重下几乎无法分辨不就行了吗?
所以要满足:

Nn=1ut+1n[yngt(xn)]Nn=1ut+1n=12

这是boosting算法的核心思想。通过使得本轮产生的模型在下轮数据样本上表现差而达到多样性的目的。
那么要如何来求解上面的式子呢?
换一种思维,对于二分类的问题,要使得算法表现趋于随机,就是该模型做对的代价和做错的代价一样就好么嘛。
令:
wrong=n=1Nut+1n[yngt(xn)]right=n=1Nut+1n[yn=gt(xn)]

就是要使得错误的代价和正确代价一致: wrong=right
举个简单例子,假如 gt 在分类任务中,错误率为 ϵt ,那么正确率为: 1ϵt
要使得 gt 在下一轮的分类任务中趋于随机。给正确的点分配错误率的权重,给错误的点分配正确率的权重不就好么?
如下:假如 gt 得到错误的权重是1126,正确的损失权重是:6211。要使得其在下一次计算的时候正确率为:1/2。那么只要把所有 gt 计算正确的点乘以6211,错误的点乘以1126。这样不就好了吗?
这里写图片描述
或者乘以错误率也可以:
这里写图片描述

Adaptive Boosting算法

在二分类中,假设 gt 的错误率为 ϵt ,那么有:

ϵt=Nn=1utn[yngt(xn)]Nn=1utn

同时定义一个变量: t=1ϵtϵt
在更新的时候我们这么更新:
=t=t

我们看看合不合理,如果 ϵt12 那么 t1
这就相当于更多的关注了错误的点,而给予正确的点少的权重。
这样得到了一堆的基模型,这个时候可以采用blending的方式来得到最后的模型。
1)得到的基模型不能通过等权重统一投票的方式,对于同样的样本,因为 gt 表现好,但是 gt+1 就表现差了,两者会相互抵消。
2)可以通过线下的blending或者stacking 的方式。

这里将通过一边得到基模型,一边得到权重的方式。
设定权重为:

αn=ln(t)

这个是可以被证明出来的,这里就不细讲了,具体可以参考李航博士的《统计学习方法》138~146页。 http://item.jd.com/10975302.html

所以整个adaboosting算法的流程如下:
1)初始化每个点的权重为 1N
2) for t in range(1,T): 进行T轮迭代
1:得到第t轮的演算法 gt
2:算出准确率 ϵt ϵt=Nn=1utn[yngt(xn)]Nn=1utn
3:算出系数: k=1ϵtϵt
4:更新下一轮模型需要样本点的权重: =k , =k
5:算出基模型系数: αk=ln(k)
3)组合最后得到的模型

G(x)=sign(t=1Tαtgt(x))

所以总的算法差不多就这样,因为这里用到了迭代的t,所以把系数改写成了k。

下面看看通过这样的算法,在VC维上有啥保证呢?
有这样的结论:
这里写图片描述
这个算法的设计者证明了
1)如果每次迭代的基本算法比乱猜好,就是 ϵ>12 那么最多经过 O(log(N)) 次迭代就可以使得 Ein(G)=0
2)又因为后面的模型复杂度的项目是和迭代次数有关,这样当数据量足够的时候,可以将 Eout(G) 做好。

Adaptive Boosting实战

从上面得到,只要在Adaptive Boosting 这个框架下,挑选一些弱弱的算法就可以得到还不错的结果。
这些弱弱的算法有哪些呢?比如逻辑回归、决策树桩等。
这里以决策树桩为例,在二维平面上就是一些垂直于坐标轴的直线。
这里写图片描述
对于复杂的点其实也是一样的。
这里写图片描述
在复杂的边界中也表现不错。这是一个非线性的模型。

在实际工作中,比较成功的案例是即时人脸识别
这里写图片描述

关于使用adaboost算法进行人脸识别可以参考;
http://www.doc88.com/p-0853166847289.html
http://www.docin.com/p-1379994056.html

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值