如何在MATLAB中找到SVM分类器的分数?

时间:2015-02-07 04:54:54

标签: matlab svm biometrics

我目前正在进行多模式生物识别技术项目(分数水平融合)。所以我需要在融合之前获得分数。 谁能告诉我如何使用经过训练的SVM分类器获得特定测试样本的分数?

我在MATLAB中使用了内置的svmtrainsvmclassify函数。

1 个答案:

答案 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 = [];

您会发现svmdecisionprivate function。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中复制。