前幾天寫了一下本身對SVM中關鍵的距離問題的理解,後面會繼續記錄本身對該模型其餘問題的理解,今天想試試SVM在「西瓜書」那個「阿爾法3.0」數據集上的效果。因而查到了「灣灣」教授林智仁先生大牛等寫的一個開源包LibSVM,而且該library能夠與不少平臺兼容,有不少語言版本,支持java 、C++、C 、MATLAB等,咱們能夠在林教授主頁上下載。LibSVM地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/,Windows平臺下載Zip壓縮文件,Linux下則是tar.gz,新版的包爲3.x。本人MATLAB開發平臺的版本號爲Windows下的R2016a,所以,記錄R2016a集成該開源包的過程。html
首先,我搜到了faruto大佬在matlabsky發的一個關於該問題的帖子,因而就按照該帖子的敘述進行相關的操做,不過踩到了好幾個坑,由於這個帖子是很久以前的,版本比較靠前,因此會有些細節上的不一樣,不過大體仍是能夠參考的。並且也有視頻的講解能夠參考。java
原貼地址:http://www.matlabsky.com/thread-11925-1-1.html
機器學習
優酷視頻:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html
ide
Step1:添加LibSVM的搜索目錄(路徑)函數
點擊主頁選項卡下的「設置路徑」按鈕---->點擊「添加幷包含子文件夾」---->點擊「libsvm-3.22」文件夾,選擇所在的目錄 ---->保存&關閉學習
Step2:安裝C++編譯器
測試
帖子中先是運行mex -setup,按照提示進行選擇,可是我在安裝了VC6.0的先後,運行該命令都會報錯:「未安裝編譯器或者SDK」,也就是安裝了VC也找不到,我猜想多是VC太舊。因此換了GCC, 因爲開發包是C++開發的,因此須要相關的編譯器進行編譯後,MATLAB纔可以調用。因爲新版本的MATLAB支持MinGW(GCC)編譯器,並且相對比較小巧,故我選擇了安裝該編譯器(也能夠安裝VS201X),安裝路徑最好是「X:\TDM-GCC-64」這種形式,「X」是盤符下載地址:http://tdm-gcc.tdragon.net/download,或者下載網盤數據,連接:http://pan.baidu.com/s/1cMwao2 密碼:xh9u 。安裝完成後再運行命令「mex -setup」,依然提示錯誤,該問題多是GCC的path設置有問題,選擇調用setenv('MW_MINGW64_LOC',folder)函數進行設置,其中folder爲GCC的路徑,例如:setenv('MW_MINGW64_LOC','D:\TDM-GCC-64') ;運行該命令後再mex -setup ,OK,能夠!
spa
Step3:make.m編譯相關的C++文件(主要是train和predict源文件).net
緊隨Step2,選擇當前目錄爲Libsvm,而後運行make腳本(當前目錄設置爲Libsvm是防止MATLAB中有與make同名的腳本),本覺得已經成功集成,誰料依然出錯「No such file or directory......」,實在是有一種fuck dog的感受,繼續填坑,查閱其餘博客,幸虧有人遇到過一樣的問題,make腳本文件中將配置MATLAB對應的代碼行進行修改,具體將「CFLAGS」修改成「COMPFLAGS」能夠用ctr+F而後點擊所有替換能夠更快。完成以上操做以後,再運行make腳本函數,成功運行,在當前文件夾(../Libsvm/matlab)中,會發現多了兩個train和predict的.obj文件這是編譯以後的結果,表示成功。視頻
Step4:測試libsvm環境
在libsvm2.x中,是有heart_scale.mat數據文件可是最新的libsvm3.x只有heart_scale純文本文件,這是C++數據數據文件的格式,若是按照faruto視頻中的操做,鍵入「load heart_scale」命令,會發現,結果出錯,這是因爲缺乏對應的MATLAB的數據格式的文件,所以須要用libsvmread命令進行讀入,該命令實際上是運行一個lib中的libsvmread.c的C文件,用於對數據的轉換,其調用格式爲libsvmread(‘filename’) ;例如[label_vector, instance_matrix] = libsvmread('heart_scale');此處用的當前路徑,不知道可不能夠用絕對路徑,能夠試試,應該是能夠的。數據通過轉換後,能夠發現,多了兩個數據,label_vector和instance,分別是樣本標籤和屬性,有了數據,下面就對環境進行正式測試。調用model = svmtrain(label_vector, instance_matrix) ;生成訓練模型後在調用svmpredict(label_vector, instance_matrix, model, 'q'),獲得結果。我用周教授《機器學習》上的西瓜數據集α3.0進行環境測試,獲得結果如圖所示:
雖然結果不好,可是環境是搭建好了的,測試成功,由於我並無分訓練集和測試集,並且數據只有18條左右,因此這結果沒啥意義,我就只是單純測試環境是否搭建好,僅此而已。