<1> 下載Libsvm、Python和Gnuplot。我用的版本分別是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.
<2> 修改訓練和測試資料的格式(可以自己用perl編個小程式):
目標值 第一維特徵編號:第一維特徵值 第二維特徵編號:第二維特徵值 ...
...
例如:
2.3 1:5.6 2:3.2
表示訓練用的特徵有兩維,第一維是5.6,第二維是3.2,目標值是2.3
注意:訓練和測試資料的格式必須相同,都如上所示。測試資料中的目標值是為了計算誤差用
<3> 分別使用Libsvm中的Windows版本的工具svmscale.exe進行訓練和測試資料的歸一化,svmtrain.exe進行模型訓練,svmpredict.exe進行預測
(1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled
預設的歸一化範圍是[-1,1],可以用參數-l和-u分別調整上界和下屆,feature.txt是輸入特徵檔案名稱
輸出的歸一化特徵名為feature.scaled
(2)svmtrtrain.exe訓練模型
我習慣寫個批處理小程式,處理起來比較方便。例如svm_train.bat中訓練語句為:
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
訓練得到的模型為feature.scaled.model
具
體的參數含義可以參考說明文檔。這裡-s是選擇SVM的類型。對於迴歸來說,只能選3或者4,3表示epsilon-support vector
regression, 4表示nu-support vector regression。-t是選擇核函數,通常選用RBF核函數,原因在“A
Practical Guide support vector
classification”中已經簡單介紹過了。-p盡量選個比較小的數字。需要仔細調整的重要參數是-c和-g。除非用
gridregression.py來搜尋最優參數,否則只能自己慢慢試了。
用gridregression.py搜尋最優參數的方法如下:
python.exe
gridregression.py -svmtrain H:/SVM/libsvm-2.81/windows/svmtrain.exe
-gnuplot C:/gp373w32/pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1
-log2p -10,10,1 -v 10 -s 3 -t 2
H:/SVM/libsvm-2.81/windows/feature.scaled >
gridregression_feature.parameter
注意:-svmtrain是給出svmtrain.exe所在路徑,一定要是完整的全路徑
-gnuplot是給出pgnuplot.exe所在路徑。這裡要用pgnuplot.exe這種命令列形式的,不要用wgnupl32.exe,這個是圖形介面的。
-log2c是給出參數c的範圍和步長
-log2g是給出參數g的範圍和步長
-log2p是給出參數p的範圍和步長
上面三個參數可以用預設範圍和步長
-s選擇SVM類型,也是只能選3或者4
-t是選擇核函數
-v 10 將訓練資料分成10份做交叉驗證。預設為5
最後給出歸一化後訓練資料的全路徑
搜尋最優參數的過程寫入檔案gridregression_feature.parameter(注意別少了這個>符號啊)
根據搜尋到的最優參數修改feature.scaled.model中的參數
(3)用svmpredict.exe進行預測
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
其中feature_test.scaled是歸一化後的測試特徵檔案名稱,feature.scaled.model是訓練好的模型,SVM預測的值在feature_test.predicted中。