今天需要用到libsvm,然後就開始了網上找教程之旅。。。一折騰一下午又快過去了-_-#
主要參考鏈接:http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2532201.html
http://blog.csdn.net/abcjennifer/article/details/7370177
http://www.yueye.org/2013/problems-of-libsvm-used-in-matlab.html
下載libsvm:
在網站http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下載libsvm最新版本3.12,解壓到相應目錄(此處解壓即安裝)。我將其解壓後放在c盤,即C:\Program Files\MATLAB\libsvm-3.12。
設置matlab搜索工作目錄:
打開matlab,file->Set Path->Add with Subfolders,然後定位到C:\Program Files\libsvm-3.12,注意這裏最好定位到libsvm-3.12,而不要定位到libsvm-3.12子目錄matlab(也不知道是否可以,沒有試過)。點擊Save後單擊Close即可。
設置matlab當前目工作錄:
將matlab的Current Folder定位到剛剛libsvm-3.12下的matlab目錄,如我的:C:\Program Files\libsvm-3.12\matlab
必須在libsvm下的matlab目錄進行編譯操作
選擇c/c++編譯器:
在matlab的終端輸入:mex –setup,當出現Would you like mex to locate installed compilers [y]/n?提示時輸入y。然後提示讓你選擇c/c++編譯器,我這裏輸入數字2,即vs c++2010。當出現Are these correct [y]/n?提示時,輸入y即可。當出現如下提示說明編譯器選擇成功:
當然上面成功的是因爲我的編譯器安裝在系統默認的路徑下,如果網友的vs不是安裝在系統默認下則需要選擇n,然後自己手動更改安裝目錄,大家去嘗試下肯定會成功的。
在終端輸入make:
然後查看C:\Program Files\libsvm-3.12\matlab目錄下是否生成了libsvmread.mexw32,libsvmwrite.mexw32,svmtrain.mexw32,svmpredict.mexw32這4個文件,如果用,說明libsvm的matlab已經編譯成功了。
測試libsvm的matlab工具箱是否可用:
在命令行輸入下面命令:
load heart_scale;
model=svmtrain(heart_scale_label,heart_scale_inst)
[predict_lebel,accuracy]=svmpredict(heart_scale_label,heart_scale_inst,model)
則其model顯示爲:
結果顯示爲:
這說明libsvm在matlab中可以使用了。
%問題:
由於自己下的是libsvm-3.20版本,heart_scale.mat文件官方已經不提供了,所以執行第一句命令會報錯
Number of columns on line 2 of ASCII file D:\Program
Files\MATLAB\libsvm-3.20\heart_scale
must be the same as previous lines.
解決方法:
利用libsvmread函數加載
[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
但又提示can't open input file heart_scale
此時有兩種方法:1.將libsvm提供的heart_scale數據集複製到當前工作目錄
2.將當前目錄設置到libsvm-3.20目錄