支持向量機(support vector machine,SVM)是機器學習中一種流行的學習算法,在分類與迴歸分析中發揮着重要做用。基於SVM算法開發的工具箱有不少種,下面咱們要安裝的是十分受歡迎的libsvm工具箱。html
LIBSVM 是臺灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的 SVM 模式識別與迴歸的軟件包,它不只提供了編譯好的可在 Windows 系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操做系統上應用; 該軟件還有一個特色,就是對 SVM 所涉及的參數調節相對比較少,提供了不少的默認參數,利用這些默認參數就能夠解決不少問題;而且提供了交互檢驗(Cross-SVM迴歸等問題,包括基於一對一算法的多類模式識別問題。c++
在MATLAB中,一樣自帶了一個svm工具箱,不過相比於libsvm,在功能性和易用性方面有一些差距。具體差異表如今:git
常見的擴展爲多分類的方法有:github
一對一(one-versus-one)方法,訓練時對於任意兩類樣本都會訓練一個二分類器,最終獲得k(k-1)/2個二分類器,共同組成k分類器。對未知樣本分類時,使用全部的k(k-1)/2個分類器進行分類,將出現最多的那個類別做爲該樣本最終的分類結果。算法
一對多(one-versus-rest)方法:訓練時依次把k類樣本中的某個類別歸爲一類,其它剩下的歸爲另外一類,使用二分類的SVM訓練處一個二分類器,最後把獲得的k個二分類器組成k分類器。對未知樣本分類時,分別用這k個二分類器進行分類,將分類結果中出現最多的那個類別做爲最終的分類結果。編程
在libsvm的官方主頁上能夠下載libsvm的擴展包,支持MATLAB、Java、Python等多種語言,這裏咱們選擇MATLAB版本,下載zip文件便可。windows
或者直接下載我分享的文件包,點擊這裏下載緩存
若是是從官方主頁上下載,須要再下載一個數據集[heart_scale.mat],方便以後的測試,點擊這裏下載。機器學習
若是是下載我分享的文件包,裏面已經包含了這個數據集.mat文件,就不須要再下載了。函數
在\libsvm-3.23\matlab
目錄下,有一個README文件,詳細說明了安裝方法。
若是是windows 64位系統,預編譯的二進制文件已經提供,在\libsvm-3.23\windows
文件下,能夠看到4個文件,分別是libsvmread.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、svmpredict.mexw64。
這樣能夠跳過下面第一步的編譯步驟。
若是是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的下載、安裝、激活方法,能夠參考這個連接。
在獲得libsvmread.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、svmpredict.mexw64這4個文件後,爲了不和svm內置的函數衝突,最好將svmtrain.mexw6四、svmpredict.mexw64這兩個文件重命名爲libsvmtrain.mexw6四、libsvmpredict.mexw64。
將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文件或者是官方主頁的說明。