eclipse + libsvm-3.12 用SVM實現簡單線性分類

來源:互聯網
上載者:User

0. 下載libsvm壓縮包解壓到本地目錄(from:http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html)
1. 建立JAVA工程,匯入libsvm包及其源碼
2. 編寫測試代碼,使用libsvm函數進行分類預測
3. 參考貼

一、建立JAVA工程,匯入libsvm包及其源碼。

  1. 建立JAVA工程及主函數main後,右鍵工程=>build path=>configure build path,Java Build Path>Libraries>Add External JARs,匯入libsvm.jar。

  2. 關聯libsvm源碼(方便以後查看源碼):點開libsvm.jar=>Source attachment:(None)=>Edit,External location=>External Folder

  選擇libsvm-3.12下java目錄,一路OK。

[Go Top]

二. 編寫測試代碼,使用libsvm函數進行分類預測

  測試代碼如下:

 1 import libsvm.svm; 2 import libsvm.svm_model; 3 import libsvm.svm_node; 4 import libsvm.svm_parameter; 5 import libsvm.svm_problem; 6  7 public class jmain { 8  9     /**10      * @param args11      */12     public static void main(String[] args) {13         //定義訓練集點a{10.0, 10.0} 和 點b{-10.0, -10.0},對應lable為{1.0, -1.0}14         svm_node pa0 = new svm_node();15         pa0.index = 0;16         pa0.value = 10.0;17         svm_node pa1 = new svm_node();18         pa1.index = -1;19         pa1.value = 10.0;20         svm_node pb0 = new svm_node();21         pb0.index = 0;22         pb0.value = -10.0;23         svm_node pb1 = new svm_node();24         pb1.index = 0;25         pb1.value = -10.0;26         svm_node[] pa = {pa0, pa1}; //點a27         svm_node[] pb = {pb0, pb1}; //點b28         svm_node[][] datas = {pa, pb}; //訓練集的向量表29         double[] lables = {1.0, -1.0}; //a,b 對應的lable30         31         //定義svm_problem對象32         svm_problem problem = new svm_problem();33         problem.l = 2; //向量個數34         problem.x = datas; //訓練集向量表35         problem.y = lables; //對應的lable數組36         37         //定義svm_parameter對象38         svm_parameter param = new svm_parameter();39         param.svm_type = svm_parameter.C_SVC;40         param.kernel_type = svm_parameter.LINEAR;41         param.cache_size = 100;42         param.eps = 0.00001;43         param.C = 1;44         45         //訓練SVM分類模型46         System.out.println(svm.svm_check_parameter(problem, param)); //如果參數沒有問題,則svm.svm_check_parameter()函數返回null,否則返回error描述。47         svm_model model = svm.svm_train(problem, param); //svm.svm_train()訓練出SVM分類模型48         49         //定義測試資料點c50         svm_node pc0 = new svm_node();51         pc0.index = 0;52         pc0.value = -0.1;53         svm_node pc1 = new svm_node();54         pc1.index = -1;55         pc1.value = 0.0;56         svm_node[] pc = {pc0, pc1};57         58         //預測測試資料的lable59         System.out.println(svm.svm_predict(model, pc));60     }61 }

  運行結果為:

null*optimization finished, #iter = 1nu = 0.0033333333333333335obj = -0.0033333333333333335, rho = 0.0nSV = 2, nBSV = 0Total nSV = 2-1.0

  第一行null是svm.svm_check_parameter(problem, param)的輸出,表示參數設定無誤;最後一行的-1.0表示對c點的預測lable是-1.0。

  要注意的幾點是:
  1. 主要用了svm.svm_train()做訓練,用svm.svm_predict()做預測,其中用到了svm_problem、svm_parameter、svm_model、svm_node幾種“結構體”對象。
  2. svm_node表示的是{向量的分量序號,向量的分量值},很多疏鬆陣列均用此方法儲存資料,可以節約空間;svm_node[]則表示一個向量,一個向量的最後一個分量的svm_node.index用-1表示;svm_node[][]則表示一組向量,也就是訓練集。

[Go Top]

參考貼:

  1. 視頻: 一個執行個體搞定libsvm分類《Learn SVM Step by Step》by faruto
  2. 如何使用libsvm進行分類
  3. Felomeng翻譯:libsvm2.88之函數庫的使用

[Go Top]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.