Adaboost算法

一.Boosting和Bagging

      首先,Boosting和Bagging两种算法都是通过构造一系列的预测函数,然后以某种方式将他们组合成最终的预测模型,以此来提高学习算法的准确度。

      Bagging的主要思想是给定一个弱学习算法和一组训练集(x1,y1),…,(xn,yn)。让该学习算法训练多轮,每轮的训练集由初始的训练集中随机取出的n个训练例组成,初始训练例在某轮训练集中可以出现多次或根本不出现。训练之后可得到一个预测函数序列h1,h2,…,ht,最终的预测函数H对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别。

      Bagging对不稳定的学习算法能提高预测的准确度,二对稳定的学习算法效果不明显,有时甚至使预测精确度降低。(不稳定指如果训练集由较小的变化,学习算法产生的预测函数将发生较大变化,例如决策树、神经网络等)。

      Bagging与Boosting的区别:

a)   Bagging的训练集的选择是随机的,各轮相互独立,而Boosting的训练集不是独立的,各轮训练集的选择与前面各轮的学习结果有关。

b)   Bagging的各个预测函数没有权重,而Boosting是有权重的。

c)   Bagging的各个预测函数可以并行生成,而Boosting的各个预测函数只能顺序生成。

二.Adaboost算法

      Boosting算法在实践上的缺陷就是它需要预先知道弱学习算法学习正确率的下限,这个是很难做到的。Adaboost(Adaptive Boost)算法不需要任何关于弱学习期的先验知识,因而更容易应用到实际问题当中。

      Adaboost算法是Boosting家族中最具有代表性的算法,它的基本思想是:首先给出任意一个弱学习算法和训练集(x1,y1),(x2,y2),…,(xn,yn),此处xi∈X,yi∈Y={+1,-1}。初始化时,Adaboost为每一个训练例赋相等的权重1/n,然后用该学习算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的的权重,也就是让学习算法在后续的学习中集中对比较难的训练例进行学习,从而得到一个预测函数序列h1,h2,…,ht,其中hj也有权重(预测效果好的预测函数权重大,反之较小)。最终的预测函数H对分类问题采用有权重的投票方式,对回归问题采用加权平均的方法对新示例进行判别。

      Adaboost算法如下:

输入:(x1,y1),(x2,y2),…,(xn,yn),其中xi∈X,yi∈Y={+1,-1}。
初始化:U=(1/n,1/n,…,1/n) //样本初始权重
for j=1:T
    hj=P(x,y,U)
    e=∑(hj(xi)!=yi)Ui
    if e>1/2
       j=T;
       break;
    end
    wj=ln((1-e)/e) //hj的权重
    for i=1:n //调整样本权重
        if hj(xi)!=yi
           Ui=Ui/(2e)
        else
           Ui=Ui/(2(1-e)
        end
     end
     for i=1:n
         Ui=Ui/∑Ui //使∑Ui=1
     end
end
输出:H=sign(∑wihi(x)) i=1:T

三.总结

      Boosting要求分类方法不稳定,例如决策树、神经网络算法等。

      Boosting算法的优点是:相比较而言,它有较高的正确率,不需要先验知识,只需要合适的迭代次数。

      Boosting算法的缺点是:运行速度慢,在一定程度上依赖于训练数据集合和弱学习器的选择,训练数据不充足或者弱学习器太差,都会导致训练精度下降。另外,Boosting易受到噪声的影响,因为它会在每次迭代中给噪声分配较大的权重,使得这些噪声在以后的迭代中受到更多的关注。

四.实践

      《Cost-sensitive boosting neural networks for software defect prediction》,此文是我在做软件缺陷预测时的一个对比算法,可以拿来作为一个boosting学习的练习吧……

原文地址:https://www.cnblogs.com/Rosanna/p/3517317.html