使用LIBSVM工具實現樣本分類預測——MatLab


准備工作:

  1. https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下載LIBSVM;(LIBSVM工具相較於MATLAB自帶的工具:1).支持多分類及回歸(‘-s 0’ ,‘-s 1' -> 多分類'-s 3';'-s 4' -> 回歸;'-s 2' -> one-class SVM),matlab自帶的僅支持二分類,且不支持回歸2).支持核函數種類多樣(linear;polynomial;RBF(radial basis function);sigmoid;precomputed kernel)3).解決算法是SMO(序列最小化),matlab自帶的三種SMO,QP(經典二次規划),LS;4).能夠調節RBF核函數的參數,matlab自帶的不能調節)
  2. 將libsvm文件夾設為matlab搜索路徑,並進入.../libsvm-3.xx/matlab目錄; 
  3. 運行mex -setup,選擇編譯器(前提是要安裝有C++編譯器,如VS2010)
  4. 命令窗口輸入:make,生成四個文件:libsvmread.mexw32,libsvmwrite.mexw32,svmtrain.mexw32,svmpredict.mexw32(原程序是C++編譯的,這四個文件是編譯后包含了能夠在matlab環境下運行的算法)

接下來便可以進行數據分類了:

  1. 在.../libsvm3.xx目錄下運行:[label,inst] = libsvmread('heart_scale')(’heart_scale‘默認在libsvm主目錄下,且libsvm要求有參數接受讀取的結果,讀取結果為:inst:270*13\label:270*1)
  2. 運行:model = svmtrain(label,inst)(訓練函數,由於matlab自帶有svmtrain函數,因此需要進入matlab/toolbox/搜索svmtrain.m,將其改為svmtrain_matlab.m,否則會調用自帶的svmtrain函數
  3. 其中:model.Paramaters = [-s,-t,-d,-g,-r](model的Paramaters輸出了參數組)
  4. 運行: [predict,accuracy,probabilityEstimates] = svmpredict(label,inst,model) (利用模型預測所有樣本,libsvm要求所有接受參數都填寫,否則無輸出)
  5. accuracy是一個3*1矩陣,

    86.6666666666667->准確度
    0.533333333333333->MSE(mean squared error)
    0.532639204545455->r^2(squared correlation coefficient)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM