机器学习(七):集成方法(2)Boost
2017-02-05 19:40
204 查看
Boost(提升)方法不同于bagging,基分类器是顺序训练的,每个基分类器使⽤数据集的⼀个加权形式进⾏训练,其中与每个数据点相关联的权系数依赖于前⼀个分类器的表现。特别地,被⼀个基分类器误分类的点在训练序列中的下⼀个分类器时会被赋予更⾼的权重。⼀旦所有的分类器都训练完毕,那么它们的预测就会通过加权投票的⽅法进⾏组合。
确定一个分类模型;
重点观察出现分类错误的数据,产生新的模型,与原模型组合以改进模型;
重复上述过程。
把这种思想运用到机器学习算法的设计中时,就是AdaBoost算法。那么有两个问题需要回答:
如何“重点”观察出现错误分类的数据
如何将模型组合起来
AdaBoost采用的是:
提高那些前一轮中被分类器错误分类样本的权值,降低那些被正确分类样本的权值;
采用加权多数表决的方法,即加大分类错误率低的分类器的权值,减小分错错误率高的分类器的权值。
我们定义参数Δ=1−ϵtϵt−−−−−√则有,如果gt的分类效果比随机猜测要好,那么必然有ϵt<12,Δ>1,那么我们可以这样更新数据的权重:w(i)t+1←w(i)t⋅Δw(i)t+1←w(i)t/Δ
根据Δ的定义,上述过程必然是增大错误分类样本的权值,降低那些被正确分类样本的权值。
错误率越小的分类器,权重越大。很自然地,我们假设αt=monotonic(Δt),那么应当选用什么样的单调递增函数呢?我们有这样的诉求:
对于非常差的分类器(随机猜测),ϵt=12,Δ=1,那么我们希望其权重αt=0;
对于非常好的分类器,ϵt=0,Δ=∞,我们希望其权重αt=∞。
我们选择αt=ln(Δ),完全符合上述条件。
原作者有证明只需要logN次迭代,就可以令Ein(G)=0,而当T=logN时,第二项也可以变得很小。
根据AdaBoost中α的定义,我们知道将多个强学习算法(错误率很低)或者(强学习算法+多个弱学习算法)进行AdaBoost,并不会得到很好的结果,因为强学习算法的权重非常大。
决策树+Bagging=随机森林。
提升树有几个问题需要解决:
我们已经有DTree(D)算法。如何在不更改此算法的基础上,使用带有权重的数据集?
DTree可以做到Ein≈0,此时α等于无穷大,很明显不能用于Boosting方法,如何解决?
对于第一个问题,我们可以使用按权重抽样的方法新形成一个数据集:
对于第二个问题,我们可以采用剪枝、只使用部分数据集训练等方式,来增大DTree的Ein
对于剪枝问题,当我们限制树的高度为1的时候,基分类器就变成了decision stump。
w(i)T+1=w(i)1⋅∏t=1Texp(−y(i)αtgt(x(i)))=1Nexp(−y(i)∑t=1Tαtgt(x(i)))
通常这是一个复杂的优化问题,而前向分步算法求解这一优化问题的思路是:因为学习的是加法模型,如果能够从前到后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,那么就可以简化优化复杂度,具体地,对于第t步,优化如下损失函数:minα,θ∑i=1mL(y(i),Gt−1(x(i))+αg(x(i),θ))
那么我们假设损失函数为指数函数,即:J(α,g)=1m∑i=1mexp(−y(i)∑t=1Tαtgt(x(i)))
对于第t步:
(图片说明;图片中η就是我们要求的α)
很明显地。AdaBoost算法中的基分类器跟上述求解过程最终结果是一样的。
现在已经求得了基函数,如何求解α?
minαJ=∑i=1mw(i)texp(−y(i)αgt(x(i)))
也即:AdaBoost算法是前向分步算法的特例,其损失函数为指数函数。
现在我们来在更加抽象的层次上考虑问题:
如何求解?类比于前文中提到的梯度下降法,我们也采用同样的方式来解析,第t次迭代有:h(x(i))=−∂err(ft(x(i)),y(i))∂ft(x(i))
令gt(x(i))=h(x(i))带入损失函数,那么现在的问题变成了:
minη1m∑i=1merr(∑t=1t−1αtgt(x(i))+ηgt(x(i)),y(i))
现在变成了单参数问题,我们可以求解最优化的η,令αt=η。
具体细节如下:
1. AdaBoost
假设我们在对一组数据进行分类的时候,确定一个分类模型;
重点观察出现分类错误的数据,产生新的模型,与原模型组合以改进模型;
重复上述过程。
把这种思想运用到机器学习算法的设计中时,就是AdaBoost算法。那么有两个问题需要回答:
如何“重点”观察出现错误分类的数据
如何将模型组合起来
AdaBoost采用的是:
提高那些前一轮中被分类器错误分类样本的权值,降低那些被正确分类样本的权值;
采用加权多数表决的方法,即加大分类错误率低的分类器的权值,减小分错错误率高的分类器的权值。
1.1 如何确定下一轮中数据的权重?
假设第t轮,数据权重是w(i)t,这一轮中学习到的模型是gt,那么其错误率是:ϵt=∑mi=1w(i)tI(y(i)≠gt(x(i)))∑mi=1w(i)t我们定义参数Δ=1−ϵtϵt−−−−−√则有,如果gt的分类效果比随机猜测要好,那么必然有ϵt<12,Δ>1,那么我们可以这样更新数据的权重:w(i)t+1←w(i)t⋅Δw(i)t+1←w(i)t/Δ
根据Δ的定义,上述过程必然是增大错误分类样本的权值,降低那些被正确分类样本的权值。
1.2 如何确定每个分类器的权重?
对于G(x)=sign(∑t=1Tαtgt(x))错误率越小的分类器,权重越大。很自然地,我们假设αt=monotonic(Δt),那么应当选用什么样的单调递增函数呢?我们有这样的诉求:
对于非常差的分类器(随机猜测),ϵt=12,Δ=1,那么我们希望其权重αt=0;
对于非常好的分类器,ϵt=0,Δ=∞,我们希望其权重αt=∞。
我们选择αt=ln(Δ),完全符合上述条件。
1.3 完整的AdaBoost
1.4 AdaBoost的性能
原作者有证明只需要logN次迭代,就可以令Ein(G)=0,而当T=logN时,第二项也可以变得很小。
根据AdaBoost中α的定义,我们知道将多个强学习算法(错误率很低)或者(强学习算法+多个弱学习算法)进行AdaBoost,并不会得到很好的结果,因为强学习算法的权重非常大。
2. 提升树
决策树+Boosting=提升树。决策树+Bagging=随机森林。
提升树有几个问题需要解决:
我们已经有DTree(D)算法。如何在不更改此算法的基础上,使用带有权重的数据集?
DTree可以做到Ein≈0,此时α等于无穷大,很明显不能用于Boosting方法,如何解决?
对于第一个问题,我们可以使用按权重抽样的方法新形成一个数据集:
对于第二个问题,我们可以采用剪枝、只使用部分数据集训练等方式,来增大DTree的Ein
对于剪枝问题,当我们限制树的高度为1的时候,基分类器就变成了decision stump。
3. 从最小化损失函数的观点来看AdaBoost
3.1 准备工作
将之前的w(i)t和w(i)t+1的关系作一下化简:w(i)t+1=w(i)t⋅Δ−y(i)gt(x(i))=w(i)t⋅exp(−y(i)αtgt(x(i)))w(i)T+1=w(i)1⋅∏t=1Texp(−y(i)αtgt(x(i)))=1Nexp(−y(i)∑t=1Tαtgt(x(i)))
3.2 前向分步算法
我们知道G(x(i))=sign(∑t=1Tαtgt(x(i)))我们用g(x,θt)来表示gt(x),其中θ是基函数的参数。那么其损失函数极小化问题为:minαt,θt∑i=1mL(y(i),∑t=1Tαtg(x(i),θt))通常这是一个复杂的优化问题,而前向分步算法求解这一优化问题的思路是:因为学习的是加法模型,如果能够从前到后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,那么就可以简化优化复杂度,具体地,对于第t步,优化如下损失函数:minα,θ∑i=1mL(y(i),Gt−1(x(i))+αg(x(i),θ))
3.3 AdaBoost的损失函数
可以将模型公式类比于SVM:那么我们假设损失函数为指数函数,即:J(α,g)=1m∑i=1mexp(−y(i)∑t=1Tαtgt(x(i)))
3.4 求解
根据前向分步算法,每次迭代之针对一个基函数和系数:对于第t步:
(图片说明;图片中η就是我们要求的α)
很明显地。AdaBoost算法中的基分类器跟上述求解过程最终结果是一样的。
现在已经求得了基函数,如何求解α?
minαJ=∑i=1mw(i)texp(−y(i)αgt(x(i)))
也即:AdaBoost算法是前向分步算法的特例,其损失函数为指数函数。
4. Gradient Boosting
上面我们使用最小化损失函数的思想,采用前向分步算法求解来重新解释了AdaBoost算法。其中借助了损失函数是指数函数这一假设。现在我们来在更加抽象的层次上考虑问题:
如何求解?类比于前文中提到的梯度下降法,我们也采用同样的方式来解析,第t次迭代有:h(x(i))=−∂err(ft(x(i)),y(i))∂ft(x(i))
令gt(x(i))=h(x(i))带入损失函数,那么现在的问题变成了:
minη1m∑i=1merr(∑t=1t−1αtgt(x(i))+ηgt(x(i)),y(i))
现在变成了单参数问题,我们可以求解最优化的η,令αt=η。
具体细节如下:
4.1 Put everying together——梯度提升树
相关文章推荐
- 深度 | 机器学习集成算法:XGBoost思想
- [机器学习入门] 李宏毅机器学习笔记-35(Ensemble part 1;集成方法 part 1)
- Python数据分析与机器学习-Xgboost集成算法
- 机器学习笔记(9)-集成方法[AdaBoost与随机森林]
- 机器学习集成算法:XGBoost思想
- 机器学习(4)分类之集成方法
- 机器学习校招笔记3:集成学习之Adaboost
- 【机器学习实战】第7章 集成方法 随机森林(RandomForest)和 Adaboost
- 干货 | 机器学习集成算法:XGBoost模型构造
- 机器学习实践之集成方法(随机森林和AdaBoost元算法提高分类性能)
- [机器学习入门] 李宏毅机器学习笔记-36(Ensemble part 2;集成方法 part 2)
- 集成方法之AdaBoost
- 机器学习集成算法:XGBoost思想
- 机器学习教程 之 集成学习算法: 深入刨析AdaBoost
- 机器学习集成算法:XGBoost思想
- opencv机器学习 Haar特征 LBP特征 adaboost集成学习 级联分类器 支持向量机SVM 主成分分析PCA 人工神经网络(ANN) 笑脸检测 SVM分类 笑脸 检测
- 机器学习知识点(三十七)特征选择方法总结
- 机器学习之基于概率论的分类方法 : 朴素贝叶斯
- 机器学习中的相似性度量,方法汇总对比
- android下判断一个应用app是否是系统rom集成的方法