我目前正在做一个关于多式生物识别的项目(分数级的融合)。所以我需要在融合前得到分数。有人能告诉我如何使用经过训练的SVM分类器来获取特定测试样本的分数吗?
我在MATLAB中使用了内置的svmtrain和svmclassify函数。
发布于 2015-02-07 08:56:46
不幸的是,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是一个私有功能。要从函数中调用它,您必须在本地文件夹(或任何子文件夹)中创建一个副本。
https://stackoverflow.com/questions/28378722
复制相似问题