1、libsvm介紹html
SVM支持向量機是目前比較流行的一種數據挖掘方法,可以處理較高維度,具體介紹可參考這篇博文:java
LIBSVM是臺灣大學林智仁(Lin Chih-Jen)教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與迴歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操做系統上應用;該軟件對SVM所涉及的參數調節相對比較少,提供了不少的默認參數,利用這些默認參數能夠解決不少問題;並提供了交互檢驗(Cross Validation)的功能。小程序
軟件下載地址http://www.csie.ntu.edu.tw/~cjlin/libsvm/#java,最新版3.2.0ide
這裏咱們使用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 +參數
2、數據準備ui
LibSVM使用的數據格式爲<label> <index1>:<value1> <index2>:<value2> …,label表示分類,index表示第幾個變量/特徵,軟件官網已提供了大量符合數據格式要求的數據集供咱們下載:spa
http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/操作系統
下載其中名爲usps的數據集,如圖所示,該數據集分紅了10類,訓練樣本7291,測試樣本2007,屬性(變量)256個翻譯
3、數據縮放(歸一化)設計
svm-scale幫助提示
歸一化後的數據默認顯示在控制檯上因此咱們要重定向到文件裏保存
java -classpath libsvm.jar svm_scale -s 1.txt usps > scale
表示將usps訓練集進行縮放(默認的規則),將縮放後的數據結果重定向輸出到scale,並將這個縮放規則存儲在1.txt中以便後面繼續使用。
4、 訓練並生成模型
svm-train幫助提示
java -classpath libsvm.jar svm_train scale model
將歸一化後的數據文件scale訓練成模型保存在model文件中,訓練過程以下
5、利用模型進行預測
svm_predict幫助提示
java -classpath libsvm.jar svm_predict usps.t model output
利用第三步生成的模型對測試數據usps.t進行預測,預測結果保存在output文件中。
生成的預測結果文件output中直接是測試集中每一個樣本的分類。
注:
svm_toy小程序
java -classpath libsvm.jar svm_toy
彈出一個圖形窗口本身能夠在上面繪製不一樣顏色的點進行測試
注:
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的中心離原點最遠。
參考文章:
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