我目前正在进行多模式生物识别技术项目(分数水平融合)。所以我需要在融合之前获得分数。 谁能告诉我如何使用经过训练的SVM分类器获得特定测试样本的分数?
我在MATLAB中使用了内置的svmtrain
和svmclassify
函数。
答案 0 :(得分: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 = [];
您会发现svmdecision
是private function。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中复制。