libSVM C++コードを正しく使用する方法に疑問があります。 私の独自のデータを使用して、バイナリSVM分類子を訓練しました。作成者が提供するsvm-train exeを使用しています。私はsvm-predict実行ファイルを使ってモデルをテストしました。libsvm svm_nodeとsvm_predict
ラベル1:val_1 ..... N:val_n
ラベル1:val_1 ..... N:著者によって示唆されているように、電車やテストマトリックスが作成されているval_n
ラベル1:val_1 ..... N:val_n
.....
ラベル1:val_1 ..... N:val_nモデルは、このように正常に動作するようです
。
私がしようとしているのは、C++アプリケーションからモデルをロードし、分類を求めることです。私は、次の
Mat featureVector = ....; //opencv matrix 1 rows x n cols
int n = featureVector.cols;
struct svm_node *x = (struct svm_node *) malloc((n+1)*sizeof(struct svm_node));
int nonZero = 0;
for(int i = 0; i < n; i++){
//Escape zero values
if(featureVector.at<float>(0,i) != 0){
x[nonZero].index = i+1; //libsvm index start from 1
x[nonZero].value = featureVector.at<float>(0,i);
nonZero++;
}
}
x[nonZero].index = -1;//requested by libSVM
x = (struct svm_node *) realloc(x, (nonZero+1) * sizeof(struct svm_node));
//finally ask for prediction
int prediction = svm_predict(model, x);
分類器はちょうど常に同じ結果を生成している何をすべきか、私はsvm_node配列を作成するときに問題があると思います。私は結果が同じでなければ、ゼロ値をエスケープする必要があるかどうかはわかりません。誰かが私が何か間違っているかどうか知っていますか?