zoukankan      html  css  js  c++  java
  • Adaptive Boosting

    AdaBoost是boosting的一种方法,其原理是通过改变训练样本的权重,得到m个不同的分类器,每个分类器根据其误差率em,有不同的权重系数alpha m,最后组合这些不同的分类器,得到最终的分类器。
    具体地,首先所有样本权重都初始化为一样,学习之后或得一个em,根据em计算alpha m = 1/2* ln((1-em) / em),易知,em小于0.5的时候,em越大,alpha m也就小。
    根据em更新训练样本的权重
        对于分类正确的样本,权重为wm*exp(-alpha m) / zm
        对于分类错误的样本,权重为wm*exp(alpha m) / zm
    可知,正确样本权重被降低,错误样本权重被提高,错误样本权重是正确样本权重的exp(2 alpham) = (1 - em) / em倍。
    
    
    Adaboost是一个加法模型,采用前向分布算法,所示函数是指数函数exp(-yf(x))
        
    

     

    Boosting

    boosting和bagging很类似,所使用的多个分类器类型都是一致的。另外,他们的主要区别点如下:

    boosting中不同的分类器是通过串行得到的,每个分类器都是根据已经训练出来的分类器的性能来进行训练。 bagging中不同的分类器之前是没有影响的。

    boosting最终的分类结果是各个基本分类器的加权得到,bagging分类器的权重是相等的。

    boosting不改变所给的训练数据,只是改变所给训练数据的一个权值的分布。

    Boosting的主要版本:AdaBoost, GBDT

    接下来就介绍一下AdaBoost:

    Ada Boost是一个Linear Aggregation的例子。是对分类错误的example权重提高,一步一步的得到不同的弱分类器,最后融合这些分类器的算法。

    从样本中有放回抽样得到每次的训练集,以u纪录出现的次数。

    在原始数据集上来看,就相当于是对不同的样本错误采取加权来计算Ein,当前g就是寻找这些加权后的最小Ein,现在我换一种思路,不再是每次放回抽样,然后怎样怎样,而是:

    我现在有了g1,g1在一些样本上分类错误,在另一些样本上分类正确,我要怎么由g1得到g2呢?

    由于我们希望不同的g差别很大,所以我们希望在新样本上,g1的表现很差,什么叫表现很差呢?就是和你随便猜的表现差不多,

    也就是在 u(t + 1)上g1一半分错,一半分对。

    所以就可以由之前的数据,进行“加权”得到新的数据进行训练得到g2。

    假设之前的错误率为 r,那么正确分类的数据就要乘以 r,错误分类的数据就要乘以(1 - r)

    定义方块t:

    也就是说,如果这次分对了,那么权重就乘以方块t,分错了就除以方块t。这样对于错误率小于1/2的弱分类器,方块t就会大于1,错误的数据的权重就会得到加强。

    好了,有了以上的描述,那么接下来就正式一点的来理一理这个算法Ada boost.

    就是首先因为是平方误差,所以初始化权重u为1/N,然后每次就是在数据上找一个g,这基于 min Ein.然后由分类数据的对错确定数据之后的一个权重。

    得到新数据之后再训练得到g2,然后得到新权重,然后。。。鸡生蛋,蛋生鸡,子子孙孙无穷尽也。。。

    这其中,不能再使用uniform aggregation了,因为你第一次好的数据,在第二次差到极致,你这么组合有意思么?所以,这里采用Linear aggregation。而且这里的权重为ln(方块t)

    所以,我们的AdaBoost只要搭配一个弱弱的演算法就好了,那么现在就介绍一个弱弱的演算法Decision Stump

    就看单一的feature,在里面决定你要切在哪里,哪边为正,哪边为负。那么我们可以搜索所有参数的组合,得到最好的Decision Stump

    物理上看,就比如一个二维的。每次只能切水平刀,竖直刀。

    对于权重和更新参数的另一种更新规则,统计学习方法教材上有更详细的描述,而且我觉得那种更新方法似乎更有道理。

    Adaboost优缺点:

    优点:分类时,分类精度高

        弱分类器好选择

        构造简单,结果可理解

        不容易产生过拟合

    缺点:对异常值明感

  • 相关阅读:
    【NOI2005T1】瑰丽华尔兹-DP单调队列优化
    【POJ1113】Wall-Graham-Scan算法求凸包
    【POJ1113】Wall-Graham-Scan算法求凸包
    【POJ2774】Long Long Message-求最长公共子串(后缀数组求法)
    【POJ2774】Long Long Message-求最长公共子串(后缀数组求法)
    【POJ2195】Going Home-最小费用最大流模板题
    【POJ2195】Going Home-最小费用最大流模板题
    【POJ1273】Drainage Ditches-最大流问题
    【POJ1273】Drainage Ditches-最大流问题
    codevs 1155 金明的预算方案
  • 原文地址:https://www.cnblogs.com/futurehau/p/6490467.html
Copyright © 2011-2022 走看看