MATLAB安裝libsvm工具箱的方法
支持向量機(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的官方主頁
或者直接下載我分享的文件包,點擊這裏下載
註意
如果是從官方主頁上下載,需要再下載一個數據集[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工具箱的方法