测量matlab中的不确定性svmclassify

时间:2013-03-22 21:14:11

标签: matlab svm uncertainty

我正在进行上下文对象识别,我需要事先进行观察。例如这个空间被标记为“狗”,它被正确标记的可能性是多少?你是否知道matlabs svmclassify是否有一个参数可以通过它的分类返回这种确定性水平?

如果没有,matlabs svm中有以下结构:

SVM = 
      SupportVectors: [11x124 single]
               Alpha: [11x1 double]
                Bias: 0.0915
      KernelFunction: @linear_kernel
  KernelFunctionArgs: {}
          GroupNames: {11x1 cell}
SupportVectorIndices: [11x1 double]
           ScaleData: [1x1 struct]
       FigureHandles: []

你能想出从这些方面计算好的不确定性的任何方法吗? (使用哪种支持向量?)解释SVM中不确定性的论文/文章欢迎。更多深入解释matlabs SVM也是受欢迎的。

如果你不能这样做,你能想到任何其他具有这种不确定性的SVM库吗?

4 个答案:

答案 0 :(得分:5)

萨拉姆,

提示:我建议你修改svmclassify.m函数,将svmdecision.m的f值传递给用户。这是输出类的补充。

要访问svmclassify.m,只需在Matlab命令行中输入以下内容:

 open svmclassify

我发现svmdecision.m(https://code.google.com/p/auc-recognition/source/browse/trunk/ALLMatlab/AucLib/DigitsOfflineNew/svmdecision.m?spec=svn260&r=260)可以传递f值;所以在svmclassify.m中调用svmdecision.m时,以下内容可能是替代的:

[classified, f] = svmdecision(sample,svmStruct);

通过进一步将此f值传递给用户,可以使用已在Matlab中构建的二进制分类器来设计诸如one-all-all之类的多类实现。

f值是您在与输出类相关的不同输入的比较方面所寻找的。

我希望这可以帮助您编写代码并理解它!虽然你现在可能已经解决了你的问题。

答案 1 :(得分:1)

我知道这是很久以前发布的,但我认为作者正在寻找训练SVM输出的不确定性度量,无论输出是估计标签还是估计概率,这两者都是点估计。一个衡量标准是相同输入x的输出方差。问题是常规SVM不是随机模型,例如概率/贝叶斯神经网络。在给定相同的x的情况下,SVM的推断总是相同的。

我需要检查,但也许可以训练具有随机正则化的SVM。可能是某种形式的随机边际最大化,由此在优化例程的步骤期间,输入训练向量可以经历小的随机扰动,或者可能丢弃随机选择的特征。类似地,在测试期间,可以丢弃或修改不同的随机选择的特征,每次产生不同的点估计。然后,您可以采用估计的方差,产生不确定性的度量。

可以认为,如果输入x表示模型不熟悉的模式,那么点估计将是非常不稳定和可变的。

一个简单的例子如下:想象一下2D玩具示例,其中两个类很好地分开并占据一系列密集的特征值。虽然在这一组训练的模型将很好地推广到属于火车数据中所见值的分布/范围的点,但考虑到远离两个类但在同一纬度的测试观察,这将非常不稳定。可以说,作为分离超平面。这样的观察对模型提出了挑战,因为其中一个支持向量的微小扰动可能导致分离超平面中的微小旋转,而不会显着改变训练或验证误差,但可能通过以下方式改变远距离测试观测值的估计值。很多。

答案 2 :(得分:0)

您是在提供数据并自行进行培训吗?如果是这样,最好的办法是将数据划分为训练和测试集。 Matlab有一个名为cvpartition的函数。您可以使用测试数据的分类结果来估计误报率和未命中率。对于二元分类任务,这两个数字将量化不确定性。对于具有多个假设的分类测试,最好的办法可能是在混淆矩阵中编译结果。

修改。发现了一些我用过的旧代码可能会有所帮助

P=cvpartition(Y,'holdout',0.20);

rbfsigma=1.41;

svmStruct=svmtrain(X(P.training,:),Y(P.training),'kernel_function','rbf','rbf_sigma',rbfsigma,'boxconstraint',0.7,'showplot','true');

C=svmclassify(svmStruct,X(P.test,:));

errRate=sum(Y(P.test)~=C)/P.TestSize
conMat=confusionmat(Y(P.test),C)

答案 3 :(得分:0)

LIBSVM,也有一个Matlab接口,有一个选项-b,使得分类函数返回概率估计值。它们似乎是按照Platt(2000)的一般方法计算的,该方法是执行应用于决策值的一维逻辑回归。

Platt,J。C.(2000)。 SV机器的概率。在Smola,A.J。等人。 (编辑)大边距分类器的进展。第61-74页。剑桥:麻省理工学院出版社。