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

Boosting原理

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

弱分类学习

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

Boosting的重要历史事件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::trainvoid 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}

参考文档:

转载请注明出处:

积极思考造成积极人生,消极思考造成消极人生。

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

相关文章:

你感兴趣的文章:

标签云: