在機器學習和模式識別領域,svm理論使用得很廣泛,其理論基礎是統計學習,但是如果我們的研究方向不是svm理論,我們只是利用已有的svm工具來對我們的任務進行分類和回歸,那么libsvm是一個不錯的選擇。
那么libsvm到底怎么使用呢?研究了一下,發現使用起來不是很復雜,這一小結就說說到底怎么簡單的體會libsvm吧。
一、 首先准備幾個工具:
Libsvm下載 http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Gnuplot下載:http://www.gnuplot.info/
Python下載: http://www.python.org/getit/
這里我下的libsvm版本為3.1.2,gnuplot版本為4.6.0,python版本為2.7.3。
其中libsvm的作用就不用多介紹了,gunplot是圖像繪畫工具,可以將數據可視化,python是一種程序編程語言,很方便,所以libsvm和她走得比較近。
我將libsvm解壓(即相當於安裝)在C:\Program Files\libsvm-3.12下
Gnuplot安裝在C:\Program Files\gnuplot下
Python安裝在C:\Program Files\Python27下。
二、准備環境 :
我在桌面建立了一個svm_test文件夾,將常用的幾個二進制文件拷貝到該目錄下,后面要用的。這些二進制文件包括svm-predict.exe,svm-scale.exe,svm-toy.exe,svm-train.exe,python.exe以及配置文件easy.py和grid.py。這些文件就在剛安裝的幾個軟件目錄中去找,這里就不列舉了。如下所示:

當然並不是每一次分類和回歸這些都要用到這些文件,可以自己選擇,此處只是做個通用的介紹。
用文本文件打開grid.py,改變一下配置環境,在else語句后面,你可以根據自己的環境改一下。如下:

同理,easy.py也改變一下,我的改后為:

三 、准備訓練的數據:
為了熟悉libsvm環境,這里我用libsvm自帶svm-toy.exe來產生數據,打開svm-toy.exe顯示如下:
注意到狀態行的幾個按鈕,你自己摸索下就知道是什么用了,無需介紹。下面我產生數據如下所示:

點擊下面的run按鈕,結果顯示如下:

點擊save將數據保存,我保存為before_train。
四、准備訓練參數
因為svm訓練需要手動調整參數,一般采用默認的情況即可,這里還是為了體驗libsvm,可以用libsvm自帶的grid.py來自動暴力搜索最好的參數c和g,c表示懲罰系數,g表示 gamma系數。所以我們在命令行終端輸入:

這是會出現如下的界面:

等運行完畢后在命令行終端會顯示128.0 0.5 91.4141
前面那2個參數就是c和g,第三個不用管,也就是說如果我們c用128,g用0.5來訓練svm數據效果是最好的。
但是在此過程中如果出現assertionerror:svm-train executable not found的錯誤提示:

這原因是前面的grid.py沒有更改與自己安裝文件相對應的路徑。其實我改的那些路徑也未必是安裝路徑,因為我已經把需要用的幾個exe文件復制出來了,這樣很方便,換別人的電腦這些配置不用改變太多。
五、訓練數據:
在命令行輸入svm-train .exe –c 128 –g 0.5 before_train after_train.model

運行結果如下:

並且在相應的svm_test中輸出了一個文件after_train.model。
六、預測數據。
其實我們開始就預測了下數據,只是我們用的是默認的模型,參數是-t 2 -c 100,為了對比兩者的效果,我們先采用默認參數來訓練:
在命令行輸入:svm-train.exe before_train default_predict.model

然后用默認參數訓練出的模型進行預測:
在命令行輸入:svm-predict.exe before_train default_predict.model after_train_default

其結果顯示如下:

由此可見其准確率只有85.8586%.
下面我們采用用grid.py訓練出的最佳參數來預測下模型,其過程和結果如下所示:

由此可見准確率提高到了91.6667%(但要注意這不一定很好,why?因為這是訓練數據,有可能過擬合。)
用精確模型預測后的數據可視化顯示如下:

肉眼感覺不出太大的區別,不過數據擺在那里,說明grid.py還是很牛叉的!
好吧,libsvm使用的簡單體驗過程就先到這里。
