0

我正在使用 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() 的结果。另一个问题是我试图更改训练集中的一些值,然后保存分类器。结果,如果我不更改训练集的大小(即使值完全不同),我得到分类器总是相同的

这怎么可能?有人能告诉我训练、保存和预测功能是如何工作的吗?谢谢你

4

1 回答 1

1

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

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

上面的代码片段对我有用一些训练数据。

于 2011-09-23T20:55:50.713 回答