我目前正在做一個關於多模態生物特徵識別(融合在評分級別)的項目。所以我需要在融合前得分。 任何人都可以告訴我如何使用經過訓練的SVM分類器得到特定測試樣本的分數嗎?如何在MATLAB中找到SVM分類器的分數?
我已經在MATLAB中使用內置的svmtrain
和svmclassify
函數。
我目前正在做一個關於多模態生物特徵識別(融合在評分級別)的項目。所以我需要在融合前得分。 任何人都可以告訴我如何使用經過訓練的SVM分類器得到特定測試樣本的分數嗎?如何在MATLAB中找到SVM分類器的分數?
我已經在MATLAB中使用內置的svmtrain
和svmclassify
函數。
不幸的是,svmclassify
函數只輸出類的標籤,沒有距離(分數)。你將不得不編寫你自己的分類功能。幸運的是,這是很簡單:當你這樣做有統計工具箱與svmclassify
,你可以很容易地查看該函數的源代碼
edit svmclassify
你會看到,大多數的功能是檢查輸入等。重要的部分是縮放數據:
sample(:,c) = svmStruct.ScaleData.scaleFactor(c) * ...
(sample(:,c) + svmStruct.ScaleData.shift(c));
,並使用內置函數svmdecision
做分類:
outclass = svmdecision(sample,svmStruct);
根據svmdecision
的定義,您將看到它輸出的距離爲f
,但svmclassify
忽略它。因此,你可以很容易地創建一個新的功能,這看起來幾乎正是像svmclassify
,而且還返回f
:
1 function [outclass,f] = svmclassify(svmStruct,sample, varargin)
...
112 [outclass,f] = svmdecision(sample,svmStruct);
...
158 outclass = []; f = [];
你會發現,svmdecision
是private function。爲了能夠從你的函數調用它,你必須在你的本地文件夾(或任何子文件夾)中創建一個副本。
我已經寫了如你所說的函數,但是它的顯示錯誤:「在分類過程中遇到了錯誤 未定義函數的'svmdecision'類型爲'struct'的輸入參數。」 – 2015-02-09 04:33:31
'svmdecision'是一個私有函數。我把這個添加到答案 – hbaderts 2015-02-09 06:11:16
你能告訴我如何在我們自己的函數中使用私有函數嗎? – 2015-02-10 10:32:33
你是什麼意思的「分數」?你看過'svmtrain'結構輸出的內容嗎?你可以使用這些嗎? – eigenchris 2015-02-07 05:59:16