如何在 MATLAB 中找到 SVM 分类器的分数?
How to find the score of a SVM classifier in MATLAB?
我目前正在做一个关于多模态生物识别(分数级融合)的项目。所以我需要在融合之前得到分数。
谁能告诉我如何使用经过训练的 SVM 分类器获得特定测试样本的分数?
我在 MATLAB 中使用了内置的 svmtrain
和 svmclassify
函数。
不幸的是,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。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中制作一个副本。
我目前正在做一个关于多模态生物识别(分数级融合)的项目。所以我需要在融合之前得到分数。 谁能告诉我如何使用经过训练的 SVM 分类器获得特定测试样本的分数?
我在 MATLAB 中使用了内置的 svmtrain
和 svmclassify
函数。
不幸的是,svmclassify
函数只输出class的标签,没有距离(分数)。您将不得不编写自己的 classification 函数。幸运的是,这非常简单:因为您拥有带有 svmclassify
的统计工具箱,您可以使用
edit svmclassify
你会看到大部分功能是检查输入等。重要的部分是缩放数据:
sample(:,c) = svmStruct.ScaleData.scaleFactor(c) * ...
(sample(:,c) + svmStruct.ScaleData.shift(c));
并使用内置函数 svmdecision
:
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。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中制作一个副本。