• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签:

资源简介

adaboost源码,用c++写的。抛开了积分图计算等复杂的部分,专注于adaboost算法的具体实现过程,希望对初学者有帮助,也希望高手不吝指教。

资源截图

代码片段和文件信息

/*初学adaboost,希望能和大家交流 QQ:358807915
email:smile_spring@yeah.net
*/


#include 
#include 
#include 
#include
#include 
using std::vector ;
using namespace std;
#define FCOUNT 100//特征数
#define CCOUNT 30//弱分类器个数
#define PCOUNT 200//正样本数
#define NCOUNT 300//负样本数

struct sample
{
int features[FCOUNT];//特征
int pos_neg;//正0,负1
float weight;//权值
int result;//分类器的识别结果

};
struct weakClassifier
{
int indexF;
float threshold;
};
struct MySortFunction
{
    int m_n;
    MySortFunction(int n):m_n(n)
    {
    }
    bool operator()(sample&s1sample&s2)const
    {
        return s1.features[m_n]    }
};
//创建正样本
void CreatePos(vector&a)
{
int ij;
   for(i=0;i {
sample temp;
temp.pos_neg=0;
temp.weight=(float)1/(2*PCOUNT);
temp.result =0;
for(j=0;j temp.features[j]=rand()%10;
a.push_back(temp);
}
}
float min(float afloat b)
{
return(a<=b?a:b);
}
//创建负样本
void CreateNeg(vector&a)
{
int ij;
for(i=0;i {
sample temp;
temp.pos_neg=1;
temp.weight=(float)1/(2*NCOUNT);
temp.result =1;
for(j=0;j temp.features[j]=rand()%10;
a.push_back(temp);
}
}
//Training classifier
void Training(vector&avector&bfloat*factors)
{
int ij;
vector::size_type id=0tcount=a.size();
for(i=0;i {
weakClassifier temp;
    float totalWeights=0.0totalPos=0.0totalNeg=0.0bPos=0bNeg=0;//(当前样本之前的)正负样本权值和
float ethrbesterr=1.0;//训练单个分类器时用到的错误率,阈值,最小错误率
float FThr[FCOUNT];//特征阈值
float minErr=1.0;//所有特征的最小错误率
    float beta;//更新权值所需系数
/*权重归一化*/
for(id=0;id {

评论

共有 条评论

相关资源