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

How to find the score of a SVM classifier in MATLAB?

我目前正在做一个关于多模态生物识别(分数级融合)的项目。所以我需要在融合之前得到分数。 谁能告诉我如何使用经过训练的 SVM 分类器获得特定测试样本的分数?

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

不幸的是,svmclassify函数只输出class的标签,没有距离(分数)。您将不得不编写自己的 classification 函数。幸运的是,这非常简单:因为您拥有带有 svmclassify 的统计工具箱,您可以使用

轻松查看函数的源代码
edit svmclassify

你会看到大部分功能是检查输入等。重要的部分是缩放数据:

sample(:,c) = svmStruct.ScaleData.scaleFactor(c) * ...
              (sample(:,c) +  svmStruct.ScaleData.shift(c));

并使用内置函数 svmdecision:

进行 class化
outclass = svmdecision(sample,svmStruct);

svmdecision的定义你会看到它输出距离f,但svmclassify忽略它。因此,您可以轻松地创建一个新函数,它看起来几乎 完全 svmclassify,但也 returns f:

1   function [outclass,f] = svmclassify(svmStruct,sample, varargin)
...
112    [outclass,f] = svmdecision(sample,svmStruct);
...
158    outclass = []; f = [];

你会发现svmdecision是一个private function。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中制作一个副本。