MATLAB LIBSVM的概率输出



我使用LIBSVM工具箱的Matlab。我的问题是一个二元分类问题,标签为1(真)和0(假)。当我用这个函数训练我的系统时:

svmstruct = svmtrain(TrainTargets, TrainInputs,['-t 2 ' '-g ' SIGMA ' -c ' P ' -q' ' -b 1']);

和测试我的测试精度与这个函数:

[TestOutputs, ~, ~] = svmpredict(TestTargets, TestInputs, svmstruct,'-b 1 -q');

现在我想使用设计的SVM模型来处理我们的样本数据。所以我使用这个函数:

[OUT, ~, Prob_Out] = svmpredict(zeros(size(Outsample_DATA,1),1), Outsample_DATA, svmstruct,'-q -b 1');

对于我的第一个训练模型(我已经训练了具有不同参数的SVM模型),我有这个输出(两种情况下的Out样本数据集是相同的):[Prob_Out Out]

0.8807    0.1193         0
0.8717    0.1283         0
0.0860    0.9140    1.0000
0.7846    0.2154         0
0.7685    0.2315         0
0.7916    0.2084         0
0.0326    0.9674    1.0000
0.7315    0.2685         0
0.3550    0.6450    1.0000

第二个是:

0.4240    0.5760         0
0.4090    0.5910         0
0.7601    0.2399    1.0000
0.5000    0.5000    1.0000
0.4646    0.5354         0
0.4589    0.5411         0

假设我想用这些概率找到类1。在第一组数据中,当第二列大于第一列时,该样本属于类1;在第二组数据中,当第一列大于第二列时,该样本属于类1。

这两个样本数据的结构是相同的。有什么问题吗?

谢谢。

p。当我在训练后检查SVMstruct参数时,这些模型中的一个Label是[0;1],另一个Label是[1;0]!

正如您已经注意到的,差异是由于标签的不同映射。

LIBSVM在内部使用自己的标签,因此需要在内部标签和您提供的标签之间进行映射。

这个映射中的标签是使用标签在训练数据中出现的顺序生成的。因此,如果训练数据中第一个元素的标签发生了变化,那么标签映射也会发生变化。

最新更新