2013-05-16 77 views
1

我想在Visual Studio 2010中使用LIBSVM只是爲了我的測試樣品,僅此而已..在Visual Studio 2010中

我已經用它的官方網站提供的資料與LIBSVM工作分類使用SVM ...

所以我用這些步驟依次

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

2)。 svm-scale -r range 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-預測test.scale train.model test.out

,它工作得很好,但問題是,我不知道該怎麼做在Visual Studio中這些步驟...我只是裝我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代碼,在蟒蛇我我的測試數據的精度爲98%,但在這裏不到20%!這在某種程度上aweful ...

我也用OpenCV進行訓練我的數據和測試我的示例(使用ml.h) 但在OpenCV中,我得到了70%的準確率。而且我的實際結果還是減少了20%以上!

我認爲這個問題是在縮放..因爲在這兩種svm.h和OpenCV我沒有找到我的縮放火車和測試數據的任何功能.....

回答

0

你的命令的用法線工具看起來不錯。如果您不像培訓數據那樣調整測試數據,那麼預測就會失敗,就像您發現的那樣。

只需從http://www.csie.ntu.edu.tw/~cjlin/libsvm/獲取libsvm的源代碼,並將svm-scale.c中的縮放還原邏輯合併到您的代碼中。 要查看縮放外觀和數據讀取,搜索:

if(restore_filename) 

的實際比例是在一個名爲輸出功能()完成。顯然,直接返回值而不是打印結果。

順便說一句在opencv中的libsvm版本是相當老的(所以我避免它)。

+0

你確定嗎? (我的意思是我的問題在於「不縮放」我的測試特徵矢量? – PsP

+0

如果您縮放了訓練數據並且沒有對測試數據應用相同的縮放比例,那麼這肯定是一個問題,您可以使用'svm-在命令行上預測test.model test.out'(而不是'test.scale')。當然,你的VS代碼中可能還有其他問題。你是否使用了與你在命令中使用的測試數據相同的測試數據行(也許打印出來一些它來檢查它確實是一樣的)? – Bull

+0

我並不那麼粗心;),我很確定這些初步步驟......但是,非常感謝,你幫了我很多,至少我知道從哪裏開始以及接下來要做什麼...... – PsP