MATLAB安裝libsvm工具箱的方法


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

libsvm簡介

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

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

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

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

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

  • 一對一(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文件便可。windows

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

注意

若是是從官方主頁上下載,須要再下載一個數據集[heart_scale.mat],方便以後的測試,點擊這裏下載機器學習

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

libsvm的安裝

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

若是是windows 64位系統,預編譯的二進制文件已經提供,在\libsvm-3.23\windows文件下,能夠看到4個文件,分別是libsvmread.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、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.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、svmpredict.mexw64這4個文件後,爲了不和svm內置的函數衝突,最好將svmtrain.mexw6四、svmpredict.mexw64這兩個文件重命名爲libsvmtrain.mexw6四、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

相關文章
相關標籤/搜索