最近簡單學習了一下libsvm的使用。在這裏簡單記錄一下。
1. libsvm是幹嘛用的?
其實我覺得,會去用libsvm的人肯定知道它是幹嘛的,不知道它是幹嘛的人肯定不會去用它(我廢話好多)。總之,Support Vector Machine(SVM)是機器學習中一種classification的方法,而libsvm則實現了這種方法,直接用就行了。
2. 下載,配置
(以下針對Windows用戶)
下載zip網址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/, 解壓
解壓後的文件夾中有個windows文件夾,裏面有svm-scale.exe, svm-train.exe, svm-predict.exe, 這三個就是執行libsvm最重要的啦!你可以把這文件夾加到環境變量裏然後直接在cmd裏用這三個命令,或者把所有的數據,py文件和這三個exe文件都放到一個文件夾裏然後cmd裏cd到這個文件夾再執行。這個隨便不多講。
此外,最好再安裝一下python和gnuplot,在上面的網址也可以找到它們的安裝路徑。爲啥要安裝它們我一會兒會講到。
3. 基本使用
假設你有train_data, test_data
step 1: Training
>>svm-train train_data
(這一步輸出training後的model: train_data.model)
step 2: Predicting
>>svm-predict test_data train_data.model test_data.predict
(回車,你會看到predicting 的accuracy)
簡單吧?但是有兩個前提:
首先,train_data, test_data必須符合libsvm要求的格式。我稱這步爲step -2.
格式要求:[label] [index1]:[value1] [index2]:[value2] ...
其次,如果要達到更高的精確度,有時需要將train_data, test_data進行scale。我稱這步爲step -1.
這步要用到svm-scale。
再次,如果要達到更高的精確度,我們需要用cross-validation來確定kernel function的參數值。我稱這步爲step 0.
這步會用到grid.py. (所有python .py 文件都在解壓文件的tools文件夾中)
到這裏,基本步驟講完了。是不是還是有點小複雜?
其實,解壓包裏tools文件夾中有一個easy.py文件,它會自動完成從step -1 到 step 2的所有工作。也就是說,你只需要按libsvm的要求準備好相應格式的數據,剩下的全部交給easy.py就行了。
4. easy.py使用
前提,安裝好python 和 gnuplot.
將解壓後得到的文件夾下的整個windows目錄拷到一個新的目錄下,e.g. E:/
把你的train data, test data, tools文件夾中的所有.py文件,還有下載安裝python後的那個python.exe都拷到E:/windows下(這樣就不用配置環境變量了)
修改grid.py, easy.py文件,找到其中關於gnuplot路徑的那項(默認路徑爲gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe"),根據你實際保存的路徑進行修改,save.
現在萬事具備了。
cmd->cd E:/windows
輸入
python easy.py train_data test_data
回車就可以了。
easy.py自動scaling data, cross validation(這時會自動運行gnuplot,一點一點畫圖選參數~~),training, predicting.....
幾秒鐘後,你會直接看到accuracy的值。
libsvm權威tutorial:
http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
另一個很詳細很好的tutorial:
http://ntu.csie.org/~piaip/svm/svm_tutorial.html