1. 程式人生 > >MATLAB安裝libsvm工具箱的方法

MATLAB安裝libsvm工具箱的方法

操作系統 win7 64 ++ 題集 sel 次方 不安裝 readme 子文件夾


支持向量機(support vector machine,SVM)是機器學習中一種流行的學習算法,在分類與回歸分析中發揮著重要作用。基於SVM算法開發的工具箱有很多種,下面我們要安裝的是十分受歡迎的libsvm工具箱。

libsvm簡介

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

libsvm與MATLAB自帶的svm工具箱的區別

在MATLAB中,同樣自帶了一個svm工具箱,不過相比於libsvm,在功能性和易用性方面有一些差距。具體差別表現在:

  • MATLAB自帶的svm實現函數僅支持分類問題,不支持回歸問題;而libsvm不僅支持分類問題,亦支持回歸問題
  • MATLAB自帶的svm實現函數僅支持二分類問題,多分類問題需按照多分類的相應算法編程實現;而libsvm采用一對一方法支持多分類
  • MATLAB自帶的svm工具箱無法改變高斯核函數中的參數,而libsvm可以
  • MATLAB自帶的svm工具箱也有一些優點,比如在解決二次規劃問題時,可選三種方法(經典二次方法;SMO;最小二乘),而libsvm只能是SMO。

常見的擴展為多分類的方法有:

  • 一對一(one-versus-one)方法,訓練時對於任意兩類樣本都會訓練一個二分類器,最終得到k(k-1)/2個二分類器,共同組成k分類器。對未知樣本分類時,使用所有的k(k-1)/2個分類器進行分類,將出現最多的那個類別作為該樣本最終的分類結果。

  • 一對多(one-versus-rest)方法:訓練時依次把k類樣本中的某個類別歸為一類,其它剩下的歸為另一類,使用二分類的SVM訓練處一個二分類器,最後把得到的k個二分類器組成k分類器。對未知樣本分類時,分別用這k個二分類器進行分類,將分類結果中出現最多的那個類別作為最終的分類結果。

libsvm的下載

在libsvm的官方主頁

上可以下載libsvm的擴展包,支持MATLAB、Java、Python等多種語言,這裏我們選擇MATLAB版本,下載zip文件即可。

技術分享圖片

技術分享圖片

或者直接下載我分享的文件包,點擊這裏下載

註意

如果是從官方主頁上下載,需要再下載一個數據集[heart_scale.mat],方便之後的測試,點擊這裏下載。

如果是下載我分享的文件包,裏面已經包含了這個數據集.mat文件,就不需要再下載了。

libsvm的安裝

\libsvm-3.23\matlab目錄下,有一個README文件,詳細說明了安裝方法。

如果是windows 64位系統,預編譯的二進制文件已經提供,在\libsvm-3.23\windows文件下,可以看到4個文件,分別是libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64。

這樣可以跳過下面第一步的編譯步驟。

1.編譯

如果是win32位系統,需要自己重新編譯c文件,生成MATLAB可識別的mexw32文件。編譯方法在上述的README文件也有說明。

將MATLAB的工作文件夾調整到\libsvm-3.23\matlab目錄下,在MATLAB的命令行窗口輸入>> mex -setup,然後選擇編譯器如VS2010,最後輸入指令>>make。編譯完成後,當前路徑下會生成對應的mexw32(32位系統)mexw64(64位系統)文件。

過程如下:

matlab>> mex -setup

Would you like mex to locate installed compilers [y]/n? y
Select a compiler:
[1] Microsoft Visual C/C++ version 7.1 in C:\Program Files\Microsoft Visual Studio
[0] None

Compiler: 1
Please verify your choices:
Compiler: Microsoft Visual C/C++ 7.1
Location: C:\Program Files\Microsoft Visual Studio

Are these correct?([y]/n): y

matlab>> make

註意

我的操作系統是win7 64位,原先安裝的是MATLAB2014a和VS2015,發現並不支持libsvm工具包中提供好的mexw64文件,原因是MATLAB的版本過低。

隨後我考慮重新編譯生成適合自己版本的mexw64文件,結果發現MATLAB2014a不支持識別VS2015,最高支持到VS2013。

技術分享圖片

所以解決方法有兩種,一種是給給VS降級,一種是給MATLAB升級。由於前者涉及很多.net和c++庫文件,比較繁瑣,所以最方便的做法是安裝新版本的MATLAB,新老版本的MATLAB只要不安裝在一個文件夾下,一般不會出現幹擾情況。

安裝MATLAB2016及以上版本就可以支持以上的mexw64文件,同時也能識別更新的c/c++編譯器。

MATLAB 2016b的下載、安裝、激活方法,可以參考這個鏈接。

2.重命名函數

在得到libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64這4個文件後,為了避免和svm內置的函數沖突,最好將svmtrain.mexw64、svmpredict.mexw64這兩個文件重命名為libsvmtrain.mexw64、libsvmpredict.mexw64。

3.添加到toolbox

將libsvm-3.23文件夾放置到\MATLAB R2016b\toolbox目錄下;

主頁> 設置路徑> 添加文件夾> 選擇libsvm-3.23文件夾;

技術分享圖片

添加並包含子文件夾> 選擇libsvm-3.23文件夾;

技術分享圖片

主頁> 預設> 常規> 更新工具箱緩存> 確定

技術分享圖片

測試

在MATLAB命令行窗口輸入一下指令:

load heart_scale
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g     0.07');
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);

若出現以下結果,說明安裝正確。

技術分享圖片

更詳細的關於libsvm的使用方法可以參考libsvm文件夾下的README文件或者是官方主頁的說明。


References

  • 支持向量機 - 維基百科,自由的百科全書
  • MATLAB自帶的svm實現函數與libsvm差別 - CSDN博客
  • LibSVM 在 Matlab中的使用 - 星天炎地 | Dytan Blog
  • Matlab + LibSVM + 問題集錦【20170407】 - CSDN博客
  • libsvm使用說明-碼農場
  • MatLab2016b破解版安裝教程 - CSDN博客
  • LIBSVM -- A Library for Support Vector Machines

MATLAB安裝libsvm工具箱的方法