opencv机器学习线性回归_opencv3.0机器学习算法使用

本文展示了如何使用OpenCV3.0实现几种机器学习分类算法,包括随机树、AdaBoost、多层感知机(ANN)、贝叶斯、KNN和SVM。代码详细地解释了每种算法的参数设置和训练过程。
摘要由CSDN通过智能技术生成

//随机树分类

Ptr lpmlBtnClassify::buildRtreesClassifier(Mat data, Mat responses, int ntrain_samples)

{

Ptr model;

Ptr tdata = prepareTrainData(data, responses, ntrain_samples);

model = RTrees::create();

model->setMaxDepth(10);

model->setMinSampleCount(10);

model->setRegressionAccuracy(0);

model->setUseSurrogates(false);

model->setMaxCategories(15);

model->setPriors(Mat());

model->setCalculateVarImportance(false);

model->setTermCriteria(setIterCondition(100, 0.01f));

model->train(tdata);

return model;

}

//adaboost分类

Ptr lpmlBtnClassify::buildAdaboostClassifier(Mat data, Mat responses, int ntrain_samples,int param0)

{

Mat weak_responses;

int i, j, k;

Ptr model;

int nsamples_all = data.rows;

int var_count = data.cols;

Mat new_data(ntrain_samples*class_count, var_count + 1, CV_32F);

Mat new_responses(ntrain_samples*class_count, 1, CV_32S);

for (i = 0; i < ntrain_samples; i++)

{

const float* data_row = data.ptr(i);

for (j = 0; j < class_count; j++)

{

float* new_data_row = (float*)new_data.ptr(i*class_count + j);

memcpy(new_data_row, data_row, var_count*sizeof(data_row[0]));

new_data_row[var_count] = (float)j;

new_responses.at(i*class_count + j) = responses.at(i) == j;

}

}

Mat var_type(1, var_count + 2, CV_8U);

var_type.setTo(Scalar::all(VAR_ORDERED));

var_type.at(var_count) = var_type.at(var_count + 1) = VAR_CATEGORICAL;

Ptr tdata = TrainData::create(new_data, ROW_SAMPLE, new_responses,

noArray(), noArray(), noArray(), var_type);

model = Boost::create();

model->setBoostType(Boost::GENTLE);

model->setWeakCount(param0);

model->setWeightTrimRate(0.95);

model->setMaxDepth(5);

model->setUseSurrogates(false);

model->train(tdata);

return model;

}

//多层感知机分类(ANN)

Ptr lpmlBtnClassify::buildMlpClassifier(Mat data, Mat responses, int ntrain_samples)

{

//read_num_class_data(data_filename, 16, &data, &responses);

Ptr model;

Mat train_data = data.rowRange(0, ntrain_samples);

Mat train_responses = Mat::zeros(ntrain_samples, class_count, CV_32F);

// 1. unroll the responses

for (int i = 0; i < ntrain_samples; i++)

{

int cls_label = responses.at(i);

train_responses.at(i, cls_label) = 1.f;

}

// 2. train classifier

int layer_sz[] = { data.cols, 100, 100, class_count };

int nlayers = (int)(sizeof(layer_sz) / sizeof(layer_sz[0]));

Mat layer_sizes(1, nlayers, CV_32S, layer_sz);

#if 1

int method = ANN_MLP::BACKPROP;

double method_param = 0.001;

int max_iter = 300;

#else

int method = ANN_MLP::RPROP;

double method_param = 0.1;

int max_iter = 1000;

#endif

Ptr tdata = TrainData::create(train_data, ROW_SAMPLE, train_responses);

model = ANN_MLP::create();

model->setLayerSizes(layer_sizes);

model->setActivationFunction(ANN_MLP::SIGMOID_SYM, 0, 0);

model->setTermCriteria(setIterCondition(max_iter, 0));

model->setTrainMethod(method, method_param);

model->train(tdata);

return model;

}

//贝叶斯分类

Ptr lpmlBtnClassify::buildNbayesClassifier(Mat data, Mat responses, int ntrain_samples)

{

Ptr model;

Ptr tdata = prepareTrainData(data, responses, ntrain_samples);

model = NormalBayesClassifier::create();

model->train(tdata);

return model;

}

Ptr lpmlBtnClassify::buildKnnClassifier(Mat data, Mat responses, int ntrain_samples, int K)

{

Ptr tdata = prepareTrainData(data, responses, ntrain_samples);

Ptr model = KNearest::create();

model->setDefaultK(K);

model->setIsClassifier(true);

model->train(tdata);

return model;

}

//svm分类

Ptr lpmlBtnClassify::buildSvmClassifier(Mat data, Mat responses, int ntrain_samples)

{

Ptr model;

Ptr tdata = prepareTrainData(data, responses, ntrain_samples);

model = SVM::create();

model->setType(SVM::C_SVC);

model->setKernel(SVM::RBF);

model->setC(1);

model->train(tdata);

return model;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值