AdaBoost (Adaptive Boosting) 自适应增强 简单理解算法与matlab实现
2018-02-03 20:19
507 查看
综述
AdaBoost学习算法用于提高简单学习算法的分类性能。它通过组合一组弱分类函数(具有较高分类错误的弱分类器)来形成更强的分类器。最后的强分类器采用弱分类器加阈值的加权组合的形式。AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感,但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。
与Boosting的区别:Boosting 是一种将弱分类器转化为强分类器的方法统称,而AdaBoost是其中的一种,采用了exponential loss function(其实就是用指数的权重),根据不同的loss function还可以有其他算法,比如L2Boosting, logitboost等。
实现思路: AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。
算法流程
假设输入为xi,i=1..Nxi,i=1..N弱分类器为hjhj
(x⃗ i,yi)中yi∈(−1,1)(x→i,yi)中yi∈(−1,1)
初始化权重ww
for t=1..T (T为弱分类器h个数)
进行权重归一化:wi=wi∑Nj=1wjwi=wi∑j=1Nwj使得∑i=1Nwi=1∑i=1Nwi=1
计算每个弱分类器的错误率ee,并选择错误率ee最小的弱分类器hkhk,其中错误率计算公式为ek=∑i=1Nwi(1−hk(x⃗ i)yi2)其中0≤ek≤1ek=∑i=1Nwi(1−hk(x→i)yi2)其中0≤ek≤1
计算该弱分类器的权限at=ln(1−ekek)at=ln(1−ekek)
更新权重wi=wiexp(−atyihk(x⃗ i))wi=wiexp(−atyihk(x→i))
end for
最后强分类器为H(x⃗ )=sign(∑t=1Tatht(x⃗ ))H(x→)=sign(∑t=1Tatht(x→))
Matlab实现
w = [1 1 1 1 1 1 1 1]; Y = [-1 1 1 1 -1 -1 1 -1]; h(1,:) = [-1, -1, 1, 1, 1, 1, 1, -1]; h(2,:) = [-1, 1, 1, -1, 1, 1, -1, -1]; h(3,:) = [1, 1, 1, 1, 1, 1, 1, 1]; e = []; a = []; for i = 1:2 disp('--iteration--'); sumW = sum(w); w = w ./ sumW; for j = 1:size(h,1) e(j) = sum(w.*(1 - h(j,:).*Y) / 2); end e minE = min(e); minI = find(e == minE); if (size(minI,2) > 1) minI = minI(1); end minE minI a(i) = log((1 - minE)/minE)/2 w = w .* exp(-a(i) * h(minI,:).*Y) h(minI,:) = []; e(minI) = []; end h(1,:) = [-1, -1, 1, 1, 1, 1, 1, -1]; h(2,:) = [-1, 1, 1, -1, 1, 1, -1, -1]; %h1 means h1 above, h2 means h2 above H = []; for i = 1:8 H(i) = sign(h(1,i) * a(1) + h(2,i) * a(2)); end H
总结
主要优点:Adaboost作为分类器时,分类精度很高
在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
作为简单的二元分类器时,构造简单,结果可理解。
不容易发生过拟合
主要缺点:
对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
参考文献
http://en.wikipedia.org/wiki/AdaBoosthttp://www.cnblogs.com/pinard/p/6133937.html
相关文章推荐
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 机器学习各个算法4--boosting,adaboost
- AdaBoost代码理解算法的原理
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- 数据挖掘十大经典算法学习之Adaboost自适应增强学习算法
- 集成学习之bagging、boosting及AdaBoost的实现
- 在matlab基础上简单实现一个神经网络算法
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 自适应提升算法(AdaBoost)介绍(二)
- 几种简单常用的镜头边缘检测算法(matlab实现)
- 初学者对K近邻分类算法的理解与matlab平台上的实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 几种简单常用的镜头边缘检测算法(matlab实现)
- 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)
- AdaBoost算法分析与实现
- 带色彩恢复的视网膜增强算法实现 (MATLAB版本)
- 关于《算法》上的红黑树的理解和简单实现(C代码)
- Yale人脸数据库、PCA算法实现Matlab中特征脸生成和简单的人脸识别
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)