1

テストサンプルを分類するためだけに、Visual Studio 2010でlibsvmを使用したかったのですが、それ以上のものはありません..

公式サイトで提供されているドキュメントを使用して libsvm を使用しました...

したがって、これらの手順を順番に使用しました

1)。svm-scale -l 0 -s range train.txt> train.scale

2)。svm-scale -r 範囲 test.txt> test.scale

3)。grid.py -svm-train "MYSVM_TRAIN_PATH" -gnuplot "MY_GNUPLOT_PATH" train.scale

4)。svm-train -c 32 -g 0.05 -b 1 train.scale train.model

5)。svm-predict test.scale train.model test.out

それはかなりうまくいきましたが、問題は、ビジュアルスタジオでこれらの手順を実行する方法がわからないことです...上記からtrain.model(手順4)をロードしただけで、VS10でトレーニング手順を繰り返しませんでした....ここに私のコードがあります:

  void main(){
  svm_model *Model;
   Model = svm_load_model("train.model");//loaded from svm-train (step4 above)
svm_node x[feature_size];
   (Some internal Process for obtaining new feature vector for testing)
   double result = svm_predict(Model,x);
   std::cout<<"result is"<<result<<std::endl;
   return 0}

しかし、これはpythonコードとしては発生しません。pythonでは、テストデータの精度は98%ですが、ここでは20%未満です!!!! ある意味羨ましい…

データのトレーニングとサンプルのテスト (ml.h を使用) にも OPENCV を使用しましたが、OPENCV では 70% の精度が得られました。そして、それは私の実際の結果からまだ20%以上削減されています!!!!

問題はスケーリングにあると思います..svm.hとOPENCVの両方で、トレーニングとテストデータをスケーリングするための関数が見つからなかったので.....

4

1 に答える 1

0

コマンド ライン ツールの使用状況は問題ないようです。テストデータをトレーニングデータと同じ方法でスケーリングしないと、予測が失敗することがわかりました。

http://www.csie.ntu.edu.tw/~cjlin/libsvm/から libsvm のソースを取得し、svm-scale.c のスケーリング復元ロジックをコードに組み込みます。スケーリング パラメータが読み込まれる場所を確認するには、次を検索します。

    if(restore_filename)

実際のスケーリングは、output() という関数で行われます。結果を表示する代わりに値を返す方が明らかに簡単です。

ところで、opencv の libsvm のバージョンはかなり古いので (私は避けています)。

于 2013-05-16T14:45:07.580 に答える