码迷,mamicode.com
首页 > 编程语言 > 详细

Boosting从原理到实现图像数组的训练

时间:2015-03-14 06:15:32      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:弱分类器   分类器   boosting   

Boosting原理

众做周知,boosting就是所谓的有多个弱分类器组成一个强分类器。而什么叫做弱分类学习和什么时候需要使用弱分类学习呢?

弱分类学习

弱分类学习:识别一组概念的正确率仅比随机猜的概率高一点。
同理,当需要分类的训练组具有上述特点时,可以优先考虑使用boosting算法。

Boosting的重要历史事件

  1. Kearns & Valiant (1984) : Boosting由来
  2. Kearns & Valiant (1989) : 证明了弱学习器和强学习器的等价问题。
  3. Schapire (1989) : 第一个提出了一个可证明的多项式事件的Boosting算法。
  4. Schapire ( 1993) : 第一次把Boosting算法思想用于实际应用(OCR)。
  5. Freund & Schapire (1995) : AdaBoost算法。

Boosting的原理

为了训练一系列弱分类器h1,h2,..hT,不断的对样本进行分类,每次分类后,主要关注错误的样本,计算本次分类的权重,然后将错误的样本进行下一次的分类器学习,如此类推。
最终将所有弱分类器组合起来:
技术分享

AdaBoost算法

技术分享

Boosting在OpenCV中实现训练图像组

CvBoostParams

这个类主要是对Boosting的设定,例如设定使用哪种boosting和一些训练的参数,本身是有默认值的,所以如果不设定的话,可以直接使用默认值。
默认值如下:

CvBoostParams::CvBoostParams()
{
    boost_type = CvBoost::REAL;
    weak_count = 100;
    weight_trim_rate = 0.95;
    cv_folds = 0;
    max_depth = 1;
}

如果需要设定,则设定方法如下:

CvBoostParams params(CvBoost::DISCRETE,100,0.95,0,1);

CvBoostParams::train

void boosting_train(vector<Mat> mats,vector<int> response,int class_count=2)
{
    CvBoost boost; //使用默认值
    if(mats.size()!=0)
    {
        int total=mats[0].cols*mats[0].rows;
        Mat mat=Mat(total,mats.size(),CV_64FC1);
        for(int i=0;i<mats.size();i++)
        {
            Mat col_tmp=mat.col(i);
            mats[i].reshape(1,total).col(0).convertTo(col_tmp,CV_64FC1,1/255.);
        }
        Mat resp=Mat(mats.size(),1,CV_64FC1);
        for(int i=0;i<response.size();i++)
        {
            resp.at(i,0)=response[i];
        }
        boost.train(mat.t(),CV_ROW_SAMPLE,resp);
    }
    //为了使效果更好,可以样本数换成样本数乘以分类的数,即mats.size()换成mats.size()*class_count
}

参考文档:http://docs.opencv.org/modules/ml/doc/boosting.html

转载请注明出处:http://blog.csdn.net/luoyun614/article/details/44254269

Boosting从原理到实现图像数组的训练

标签:弱分类器   分类器   boosting   

原文地址:http://blog.csdn.net/luoyun614/article/details/44254269

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!