【问题标题】:How to find the score of a SVM classifier in MATLAB?如何在 MATLAB 中找到 SVM 分类器的分数?
【发布时间】:2015-04-07 08:38:10
【问题描述】:

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

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

【问题讨论】:

  • 你所说的“分数”是什么意思?你看过svmtrain输出的结构内容吗?你能用这些吗?

标签: matlab svm biometrics


【解决方案1】:

不幸的是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。为了能够从您的函数中调用它,您必须在本地文件夹(或任何子文件夹)中制作副本。

【讨论】:

  • 我已经按照你说的写了这个函数,但是它显示错误:“分类过程中遇到错误。未定义函数'svmdecision'用于'struct'类型的输入参数。”
  • svmdecision 是一个私有函数。我将此添加到答案中
  • 你能告诉我如何在我们自己的函数中使用私有函数吗?
  • 您必须在本地文件夹中复制svmdecision 并正常使用它,就像您使用任何功能一样。
  • 我已经进行了适当的更改,但在我的情况下,我使用的是一种与所有方法。我的问题是,“我也可以对这种方法使用相同的方法吗?”
猜你喜欢
  • 2019-01-30
  • 2013-01-23
  • 2020-04-07
  • 2013-07-04
  • 2011-03-05
  • 2013-04-20
  • 2011-09-17
  • 2015-01-07
  • 2013-06-07
相关资源
最近更新 更多