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」カテゴリにある場合でも、predict() の結果として「1」を取得できることです。もう 1 つの問題は、トレーニング セットのいくつかの値を変更してから分類子を保存しようとしたことです。その結果、トレーニング セットのサイズを変更しない場合 (値がまったく異なる場合でも)、分類器は常に同じであることがわかります。

そんなことがあるものか?トレーニング、保存、予測機能の仕組みを教えてくれる人はいますか? ありがとうございました

4

1 に答える 1

1

ml ライブラリから適切な結果を得るには、以下のように分類子を作成してアクセスする必要があることがわかりました。

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

上記のコード スニップは、いくつかのトレーニング データで機能しました。

于 2011-09-23T20:55:50.713 に答える