2015-02-07 93 views
0

我目前正在做一個關於多模態生物特徵識別(融合在評分級別)的項目。所以我需要在融合前得分。 任何人都可以告訴我如何使用經過訓練的SVM分類器得到特定測試樣本的分數嗎?如何在MATLAB中找到SVM分類器的分數?

我已經在MATLAB中使用內置的svmtrainsvmclassify函數。

+0

你是什麼意思的「分數」?你看過'svmtrain'結構輸出的內容嗎?你可以使用這些嗎? – eigenchris 2015-02-07 05:59:16

回答

3

不幸的是,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 = []; 

你會發現,svmdecisionprivate function。爲了能夠從你的函數調用它,你必須在你的本地文件夾(或任何子文件夾)中創建一個副本。

+0

我已經寫了如你所說的函​​數,但是它的顯示錯誤:「在分類過程中遇到了錯誤 未定義函數的'svmdecision'類型爲'struct'的輸入參數。」 – 2015-02-09 04:33:31

+0

'svmdecision'是一個私有函數。我把這個添加到答案 – hbaderts 2015-02-09 06:11:16

+0

你能告訴我如何在我們自己的函數中使用私有函數嗎? – 2015-02-10 10:32:33