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,然後會出現如下畫面
這時,就能在清單中看到我所安裝的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類的矩陣,每一行的輸出是該測試資料屬于每個類的機率。