opencv と SVM (サポート ベクター マシン) に基づくプロジェクトを行っています。そこで、ユーザーが示したジェスチャーを識別するために、SVM を使用して分類を行う必要があります。プロジェクトに svm.cpp および svm.h ファイルを追加しました。以下は、予測部分のコードです。
svm_node x[featureVectorSize];
// inside a loop
for(int k;0 < featureVectorSize; k++)
{
x[k].index = k+1;
x[k].value = FeatureVectorVal[k]; // i have a vector to store feature values for test data //(without scaling)
}
svm_model* newmodel = svm_load_model("Mymodels\\A.scale.model");
double *ProbVal = new double[1];
double result = svm_predict_probability(newmodel,x,ProbVal);
cout<<"result "<< result<<"\n";
cout<<"ProbVal "<< *ProbVal<<"\n";
svm_free_model_content(newmodel);
svm_free_and_destroy_model(&newmodel);
//some code to show output
Q1. モデルAで分類を行うと、一致する結果の値が常に-1になります。これは、テスト データと一致しないことを意味します。その後、テスト データのスケーリングされた機能値をハードコードしました (FeatureVectorVal の上にテキスト ファイルに書き込み、Libsvm パッケージで提供される scale.exe を使用してスケーリングします)。次に、同じモデルで予測を行いました.今では+1の結果が得られました. つまり、スケーリングされたテスト データを svm_node 構造体に入力する必要があります。しかし、svm.cpp には、テスト データをスケーリングする関数が見つかりませんでした。svm.cpp 関数を使用してテスト データをスケーリングするにはどうすればよいですか?
Q2. (モデル ファイル パスの配列を使用して) 複数のモデルで予測を行うと、最初のモデルでの予測後にプログラムがクラッシュし、プロンプトが表示されます。
if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && model->probA!=NULL && model->probB!=NULL)
svm.cpp ファイルの行。
助けが必要です..事前に感謝します:-)