支持向量機libsvm實戰入門

1、libsvm介紹html


    SVM支持向量機是目前比較流行的一種數據挖掘方法,可以處理較高維度,具體介紹可參考這篇博文:java

支持向量機通俗導論(理解SVM的三層境界)

    LIBSVM是臺灣大學林智仁(Lin Chih-Jen)教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與迴歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操做系統上應用;該軟件對SVM所涉及的參數調節相對比較少,提供了不少的默認參數,利用這些默認參數能夠解決不少問題;並提供了交互檢驗(Cross Validation)的功能。小程序

    軟件下載地址http://www.csie.ntu.edu.tw/~cjlin/libsvm/#java,最新版3.2.0ide

wKiom1VlXBGQSmtfAADkfg8Qg10210.jpg


    這裏咱們使用JAVA版本的,主要就是svm_scale,svm_train,svm_predict這三個程序,只要安裝了JDK就能夠使用以下命令運行測試

java -classpath libsvm.jar svm_scale +參數
java -classpath libsvm.jar svm_train +參數
java -classpath libsvm.jar svm_predict +參數

 wKioL1VoFvChSovIAADi5RsrthU219.jpg


2、數據準備ui

    LibSVM使用的數據格式爲<label> <index1>:<value1> <index2>:<value2> …,label表示分類,index表示第幾個變量/特徵,軟件官網已提供了大量符合數據格式要求的數據集供咱們下載:spa

http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/操作系統

 wKioL1VlYaaBn3gFAACfpDty0U4812.jpg

    下載其中名爲usps的數據集,如圖所示,該數據集分紅了10類,訓練樣本7291,測試樣本2007,屬性(變量)256個翻譯

wKiom1VlaWTyZarxAAoU3aMLNaQ063.jpg


3、數據縮放(歸一化)設計

svm-scale幫助提示

wKioL1Vla-TR4ZdgAADapvB9hJI976.jpg

歸一化後的數據默認顯示在控制檯上因此咱們要重定向到文件裏保存


java -classpath libsvm.jar svm_scale -s   1.txt   usps  > scale

表示將usps訓練集進行縮放(默認的規則),將縮放後的數據結果重定向輸出到scale,並將這個縮放規則存儲在1.txt中以便後面繼續使用。

4、 訓練並生成模型

svm-train幫助提示

wKioL1VlbsOC18FxAAQK5TpI7NA712.jpg


java -classpath libsvm.jar svm_train  scale  model

將歸一化後的數據文件scale訓練成模型保存在model文件中,訓練過程以下

wKioL1VlcPPhwX4GAAIvA5nfUBk137.jpg

生成的模型文件以下所示:
wKioL1VlcdrBfG4MAAqFf_LenB4234.jpg


5、利用模型進行預測

svm_predict幫助提示

wKiom1VldTSBIU5qAACyM0aDeNw139.jpg


java -classpath libsvm.jar svm_predict  usps.t model output

利用第三步生成的模型對測試數據usps.t進行預測,預測結果保存在output文件中。

wKioL1VldH-zK-OjAABtzRbtBao146.jpg

生成的預測結果文件output中直接是測試集中每一個樣本的分類。

wKioL1VldhCR05ZLAAEBi8E34G4069.jpg




注:

svm_toy小程序

java -classpath libsvm.jar svm_toy

wKiom1Vla4_QBxpvAAAhalpXE6c626.jpg

彈出一個圖形窗口本身能夠在上面繪製不一樣顏色的點進行測試

wKioL1Vlbabis0HkAAD-xiWwI90820.jpg


注:

One Class SVM 是指你的training data 只有一類positive (或者negative)的data, 而沒有另外的一類。在這時,你須要learn的實際上你training data 的boundary。而這時不能使用 maximum margin 了,由於你沒有兩類的data。 因此呢,在這邊文章中,「Estimating the support of a high-dimensional distribution」, Schlkopf 假設最好的boundary要遠離feature space 中的原點。
左邊是在original space中的boundary,能夠看到有不少的boundary 都符合要求,可是比較靠譜的是找一個比較 緊(closeness) 的boundary (紅色的)。這個目標轉換到feature space 就是找一個離原點比較遠的boundary,一樣是紅色的直線。固然這些約束條件都是人爲加上去的,你能夠按照你本身的須要採起相應的約束條件,好比讓你data的中心離原點最遠。

wKioL1Vn5lnRKU_aAAPei3n5HXA081.jpg

 

參考文章:

http://www.tanglei.name/an-example-for-beginning-to-learn-libsvm/


別人翻譯的README裏面命令參數詳解

http://blog.sina.com.cn/s/blog_4c38701d01011ept.html


libsvm 參數說明【中英文雙語版本】

http://www.matlabsky.com/forum-viewthread-tid-12380-fromuid-18677.html

相關文章
相關標籤/搜索