CvNormalBayesClassifier

时间:2011-08-24 11:08:08

标签: c++ opencv machine-learning bayesian

我正在使用CvNormalBayesClassifier。 我正在训练一些随机数据,比如我发布的代码

CvMat* train = cvCreateMat( 100, 32, CV_32FC1 );
cvZero( train );
cvmSet( train, 0, 0, (double) 2 ); 
cvmSet( train, 0, 1, (double) 5 ); 
cvmSet( train, 1, 17, (double) 12 ); 
cvmSet( train, 1, 9, (double) 235 ); 
cvmSet( train, 29, 1, (double) 645 );
cvmSet( train, 34, 12, (double) 65 );  
cvmSet( train, 23, 3, (double) 2.64 ); 
cvmSet( train, 27, 8, (double) 5443 ); 
cvmSet( train, 3, 7, (double) 125432 ); 
cvmSet( train, 67, 14, (double) 6533 ); 
cvmSet( train, 78, 18, (double) 43265 );
cvmSet( train, 92, 12, (double) 65.543 ); 
CvMat* res=cvCreateMat( 1, 100, CV_32FC1 );
cvZero( res );
cvSet( train, cvScalarAll(CV_VAR_ORDERED));
cvSet( res, cvScalarAll(CV_VAR_CATEGORICAL));
M1.train(train, res);
CvMat* prova = cvCreateMat( 1, 32, CV_32FC1 );
cvZero( prova );
cvmSet( prova, 0, 7, (double) 10 ); 
float result=M1.predict(prova);

问题在于,即使训练中的每个元素都在“0”类别中,我也可以得到“1”作为predict()的结果。 另一个问题是我尝试更改训练集中的某些值,然后保存分类器。结果我得到的是,如果我不改变训练集的大小(即使是完全不同的值),分类器总是相同的

怎么可能? 有谁能告诉我火车,保存和预测功能如何运作? 谢谢

1 个答案:

答案 0 :(得分:1)

我发现要从ml库中获得正确的结果,您需要创建和访问分类器,如下所示:

bayes = new CvNormalBayesClassifier();
bayes->train( samplesMat, responses );

上面的代码片段为我提供了一些训练数据。