源自:
二.配置編譯器
開啟 matlab,切換到c:\program files\matlab\r2011a\toolbox\libsvm-3.12\matlab目錄下,鍵入以下命令:
mex –setup
出現提示語句
please choose your compiler for building mex-files:
would you like mex to locate installed compilers [y]/n?n %
這次是選擇編譯器,輸入n,選擇自定義的編譯器
出現以下選項(因電腦而異)
select a compiler:
[1] intel c++ 11.1 (with microsoft visual c++ 2008 sp1 linker)
[2] intel visual fortran 11.1 (with microsoft visual c++ 2008 sp1 linker)
[3] intel visual fortran 11.1 (with microsoft visual c++ 2008 shell linker)
[4] lcc-win32 c 2.4.1
[5] microsoft visual c++ 6.0
[6] microsoft visual c++ 2005 sp1
[7] microsoft visual c++ 2008 sp1
[8] microsoft visual c++ 2010
[9] microsoft visual c++ 2010 express
[10] open watcom c++
[0] none
compiler: 8%
可以用其他的,出現以下提示語句
your machine has a microsoft visual c++ 2010 compiler located at
c:\program files\microsoft visual studio 10.0. do you want to use this compiler [y]/n?
編譯器預設路徑,確認正確輸入y,更改路徑,輸入n
輸入y出現再次確認
please verify your choices:
compiler: microsoft visual c++ 2010
location: c:\program files\microsoft visual studio 10.0
are these correct [y]/n? y
編譯器配置完成
from template: c:\progra~1\matlab\r2011a\bin\win32\mexopts\msvc100opts.bat
done . . .
三.編譯
輸入命令
>> make
>>
%編譯完成
系統就會生成svmtrain.mexw32,svmpredict.mexw32,libsvmread.mexw32和libsvmwrite.mexw32等檔案(對於matlab 7.1以下上版本,生成的對應檔案為svmtrain.dll,svmpredict.dll和 read_sparse.dll,沒做測試),然後可以在matlab的選單 file->set path->add with subfolders(可直接用add folder)裡,把c:\program files\matlab\r2011a\toolbox\libsvm-3.12\matlab目錄新增進去,這樣以後在任何目錄下都可以呼叫 libsvm的函式了。
四.測試
為了檢驗 libsvm和 matlab之間的介面是否已經配置完成,可以在 matlab下執行以下命令:
>>load heart_scale
完成該步驟後發現workspace中出現了heart_scale_inst和 heart_scale_label,說明正確
>>model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
>> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); %
accuracy = 86.6667% (234/270) (classification)% done
如果執行正常並生成了model這個結構體(其中儲存了所有的支援向量及其係數),那麼說明libsvm和matlab 之間的介面已經完全配置成功。
附:如果你沒有 heart_scale.mat(官方現在都不給了,給的都是vc++下的格式 所以load 會報錯:heart_scale must be same as previous lines)
所以必須使用給的乙個函式,轉化資料此函式為libsvmread()
使用如下: [label_vector, instance_matrix] = libsvmread('filename');
此處為了跟官方統一名稱可以[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale');
由於heart_scale在libsvm-3.11目錄下,不是在matlab下,所以直接用libsvmread命令會報錯,要買改變當前路徑,或者使用[heart_scale_label,heart_scale_inst] = libsvmread('../heart_scale');../代表返回上層路徑。
注意:
1. matlab自帶了c編譯器lcc-win32c,但是libsvm原始版本是c++實現的,因此需要c++的編譯器來編譯,這就是不適用matlab預設編譯器而選擇其他c++編譯器的原因。
matlab支援的編譯器也是有限的,可以檢視不同版本matlab支援的編譯器列表
2. 如果matlab版本太低,如matlab 7.0是不能用vs作為編譯器的,只能用vc++ 6.0
3. .mexw32 檔案是經過加密的,開啟是亂碼,函式本身沒有幫助。
例如輸入 help svmpredict會出現報錯: svmpredict not found
工具箱libsvm-3.12\matlab中readme檔案才是幫助檔案。
但是輸入help svmtrain會出現幫助資訊,其實出現的是系統自帶的svmtrain函式,沒有libsvm工具箱中的好用。
4.在新版本libsvm3.12中,資料夾libsvm-3.12\windows中已經有編譯好的程式,可以直接使用,只需要把libsvm-3.12\windows新增到matlab路徑中即可,不需要編譯的過程。當然最好還是自己編譯一遍,因為編譯環境不同會導致一些不可預估的小問題,自己編譯的過程是可控的。
5. 測試用資料集,libsvm官網上提供了很多資料集
測試使用的heart_scale資料集是c++版本的(類標籤 1:第乙個屬性 2:第二個屬性…),可以用libsvmread來轉換為matlab版本的(它們的區別在類標籤)。
[label_vector, instance_matrix] = libsvmread(『c++版本資料集』); %得到類標籤和屬性矩陣,然後可以使用它們訓練了model = svmtrain(label_vector, instance_matrix);
>> load heart_scale
>> model = svmtrain(heart_scale_label,heart_scale_inst); *
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nsv = 132, nbsv = 107
total nsv = 132
>> [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
accuracy = 86.6667% (234/270) (classification)
6.參考資料
詳解:
在MATLAB中安裝libsvm
搞了一天,看了很多資料,終於搞好了matlab中呼叫大牛寫好的svm庫,將結果告訴大家避免以後走彎路。1.參考 詳解 2.操作流程 請注意 詳細操作流程請參考上面的 詳解 這裡只說大框架和詳解裡沒有提到的問題。a.設定path file set path add with subfolders 加入...
Matlab 安裝libsvm 教程
本人在書寫過程中參考了 首先本文針對的是作業系統是window 64bit,matlab2013a。2.安裝編譯環境 liabsvm在matlab中使用之前需要編譯,而matlab 2013a 已經不再提供c c 編譯器,所以需要自行安裝編譯器,我安裝的是visual studio 2012,之所以...
libsvm與matlab,安裝除錯
趁著所裡的網好,我趕緊寫下這麼一篇bug除錯,是關於matlab與 libsvm mat 2.89 3 farutoultimate3.0mcode 的 一下簡稱libsvm 閒話不多說了,首先介紹一下博主的機器 win10 64 bit matlab 2013ra 破解版 64bit visula...