支持向量機SVM的java api 使用

最近用LibSVM做分類實驗,發現網上的資料大都是關於SVM基本原理和怎麼用終端命令行使用svm-train,svm-predict等幾個程序,這些其實在README文件中已經講得很清楚了,Readme裏面幾乎包含了所有可以幫助你靈活使用LibSVM的信息,可以很多人都不怎麼看。這裏給出用JAVA調用LibSVM API最簡單的示例,用JAVA進行SVM分類只需要幾行程序就搞定了,前提是你已經準備好了符合LibSVM處理數據格式的訓練樣本和測試樣本。

1、 準備訓練樣本和測試樣本

直接上LibSVM官網就可以下載,我下載的UCI的UCI-breast-cancer數據集,訓練樣本和測試樣本的基本格式是這樣的

<label> <index1>:<value1> <index2>:<value2> ...

分別代表 類別 feature1索引:feature1值 feature2索引:feature2值

如果想自己定義核函數,那麼屬於precompute kernel values and input them as training and testing files.

此時訓練樣本和測試樣本變成如下格式:

New training instance for xi: <label> 0:i 1:K(xi,x1) ... L:K(xi,xL)
New testing instance for any x: <label> 0:? 1:K(x,x1) ... L:K(x,xL)

That is, in the training file the first column must be the "ID" of xi. In testing, ? can be any value.

很好理解,有篇EMNLP2009做觀點和關係抽取就是自己定義核函數借助SVM分類器實現的。

2、建立JAVA工程,導入LibSVM 的JAR包,要注意還需要導入java文件下的svm_train.java和svm_predict.java這兩個文件,這兩個類其實主要在LibSVM基礎上做了進一步封裝,把命令行參數轉化成了String []類型的函數參數,方便API調用。至於另外兩個svm_tony.java和svm_scale可以不導入,它們分別是圖形界面和數據壓縮用的,不是必要文件。

3、把訓練樣本和測試樣本放在工程文件夾下,當然,你也可以自定義data目錄。

4 、修改svm_train.java和svm_predict.java這兩個文件,前者主要是把model_file_name返回,因爲在svm_predict的main函數中需要使用,後者主要是把分類的Accuracy返回。

5、編寫JAVA調用LibSVM API分類代碼如下,非常簡單,代碼中給出了註釋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章