天天看點

libsvm-mat上手1.初上手遇到的問題:matlab沒找到你的C++編譯器2.建立model結構體,體驗訓練與預測

1.初上手遇到的問題:matlab沒找到你的C++編譯器

在用mex -setup指令然後選Y,但matlab傳回的結果中沒有你的C++編譯器時,

Compiler: Lcc-win32 C 2.4.1

Location: D:\PROGRA~1\MATLAB\R2010b\sys\lcc

這是matlab自帶的C編譯器,但是libsvm原始版本是C++實作的,是以需要C++的編譯器來編譯,是以不能用matlab自帶的C編譯器。

這時你應該mex -setup後選n,然後會出現如下畫面

libsvm-mat上手1.初上手遇到的問題:matlab沒找到你的C++編譯器2.建立model結構體,體驗訓練與預測

這時,就能在清單中看到我所安裝的Microsoft Visual C++ 6.0,回複 6,然後按照提示修改路徑即可。

Compiler: 6

The default location for Microsoft Visual C++ compilers is C:\Program Files\Microsoft Visual Studio,

but that directory does not exist on this machine. 

Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? n

Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] D:\Program Files\Microsoft Visual Studio

Please verify your choices:

Compiler: Microsoft Visual C++ 6.0

Location: D:\Program Files\Microsoft Visual Studio

Are these correct [y]/n? y

Trying to update options file: C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2010b\mexopts.bat

From template:              D:\PROGRA~1\MATLAB\R2010b\bin\win32\mexopts\msvc60opts.bat

Done . . .

C++編譯器配置成功。

2.建立model結構體,體驗訓練與預測

輸入make,

左側一欄能看見系統生成了svmtrain.mexw32,svmpredict.mexw32,libsvmread.mexw32和libsvmwrite.mexw32等檔案。

輸入load heart_scale

右上角 Workspace中出現了heart_scale_inst和 heart_scale_label

輸入model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 2');

生成了model結構體,并進行訓練

其中heart_scale_label是訓練樣本類别列向量,heart_scale_inst是訓練樣本特征屬性矩陣。

model模型經訓練後,使用它進行預測

>> [predict_label, accuracy, dec_values] =  svmpredict(heart_scale_label, heart_scale_inst, model);

預測結果在predict_label, accuracy, dec_values三個變量中。

類别預測時,預測的類别在predict_label中;

回歸預測時,預測的回歸結果在dec_values中。

accuracy,是一個3維的向量,從上到下分别是:分類準率(分類問題中用到的參數名額);平均平方誤差MSE (回歸問題中用到的參數名額);平方相關系數r2 (回歸問題中用到的參數名額)。

dec_values,是個矩陣,包含着決策值或者是機率估計(當’-b 1’被指定時)。

當訓練資料有n個、k類時,決策值矩陣是一個n行k*(k-1)/2列的矩陣,每一行的輸出是k*(k-1)/2個二分類器的結果。

當’-b 1’被指定時,機率估計矩陣是一個n行k類的矩陣,每一行的輸出是該測試資料屬于每個類的機率。

繼續閱讀