林轩田之机器学习课程笔记( combining predictive features之 adaptive boosting)(32之24)
欢迎转载,可以关注博客:http://blog.****.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方法如下图:
当采用放回抽样的时候,数据的有的会有重复,有的会没有,其实这个和在该点添加相关的整数权重什么分别。
所以采用放回抽样的方式本质上是一种通过调节资料点权重的方式
而我们知道,抽样的话,权重是整数的,可不可以权重是正实数,这样灵活性更高,就像计算阶乘,整数的阶乘是可以很好计算的,那么要计算一个小数的阶乘呢?是吧
通过调整权重得到的样本最后的损失函数如下:
实际的模型中怎么做到这种随心权重呢?在SVM和逻辑回归中如何做呢?
1)在soft-margin的SVM中,超参数C前面添加权重就可以了。然后通过对偶方式求解。
2)对于通过SGD方式进行优化的算法,比如逻辑回归等,可以在抽样的时候通过概率分布来做到,给予该点抽样概率。
其实在处理类别不平衡的方法中,其中一种方法就是修改损失函数类别权重。而这里是通过修改每个点的权重,就相当于是以前的一种衍生。
那么我们如何修改这些权重,使得我们的算法越来越好呢?每个基模型差异性比较大。考虑做一个二分类模型,算法迭代到了t轮以及t+1轮。
我们的目的是要使得算法的差异性比较大,这样最后模型模型提升效果才明显。那怎么做呢?假如经过t轮后,给予后面资料点的权重,使得
怎么才叫做表现差呢?如果
所以要满足:
这是boosting算法的核心思想。通过使得本轮产生的模型在下轮数据样本上表现差而达到多样性的目的。
那么要如何来求解上面的式子呢?
换一种思维,对于二分类的问题,要使得算法表现趋于随机,就是该模型做对的代价和做错的代价一样就好么嘛。
令:
就是要使得错误的代价和正确代价一致:
举个简单例子,假如
要使得
如下:假如
或者乘以错误率也可以:
Adaptive Boosting算法
在二分类中,假设
同时定义一个变量:
在更新的时候我们这么更新:
我们看看合不合理,如果
这就相当于更多的关注了错误的点,而给予正确的点少的权重。
这样得到了一堆的基模型,这个时候可以采用blending的方式来得到最后的模型。
1)得到的基模型不能通过等权重统一投票的方式,对于同样的样本,因为
2)可以通过线下的blending或者stacking 的方式。
这里将通过一边得到基模型,一边得到权重的方式。
设定权重为:
这个是可以被证明出来的,这里就不细讲了,具体可以参考李航博士的《统计学习方法》138~146页。http://item.jd.com/10975302.html
所以整个adaboosting算法的流程如下:
1)初始化每个点的权重为
2) for t in range(1,T): 进行T轮迭代
1:得到第t轮的演算法
2:算出准确率
3:算出系数:
4:更新下一轮模型需要样本点的权重:
5:算出基模型系数:
3)组合最后得到的模型
所以总的算法差不多就这样,因为这里用到了迭代的t,所以把系数改写成了k。
下面看看通过这样的算法,在VC维上有啥保证呢?
有这样的结论:
这个算法的设计者证明了
1)如果每次迭代的基本算法比乱猜好,就是
2)又因为后面的模型复杂度的项目是和迭代次数有关,这样当数据量足够的时候,可以将
Adaptive Boosting实战
从上面得到,只要在Adaptive Boosting 这个框架下,挑选一些弱弱的算法就可以得到还不错的结果。
这些弱弱的算法有哪些呢?比如逻辑回归、决策树桩等。
这里以决策树桩为例,在二维平面上就是一些垂直于坐标轴的直线。
对于复杂的点其实也是一样的。
在复杂的边界中也表现不错。这是一个非线性的模型。
在实际工作中,比较成功的案例是即时人脸识别
关于使用adaboost算法进行人脸识别可以参考;
http://www.doc88.com/p-0853166847289.html
http://www.docin.com/p-1379994056.html
欢迎转载,可以关注博客:http://blog.****.net/cqy_chen