从libSVM包中获取前n个类和相应的置信度

时间:2016-04-30 14:11:23

标签: matlab libsvm

我使用libsvm库(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)对某些数据进行分类。

这是我用于预测的语法:

[predict_label, accuracy, prob_estimates] = svmpredict(lbpModel.labels(1,1), lbpModel.features(1,:), trainedModel);

根据我的理解,prob_estimates以这种方式计算:如果您有以下类:(类1,2,3,4),算法会进行以下比较:

1 vs. 2,1比3,1比4,2比3,2比4,3比4。

因此,您在prob_estimates向量中得到6个决策值。

我应该对prob_estimates向量做出哪些更改才能得到这样的结果:

[0.7 , 0.19, 0,2, 0,1 ....]

它可以翻译成: Class1 = 70%,Class2 19%,Class3 2%,Class4 1%等。

所以基本上我想提取前三个预测类,我需要知道置信水平(%)。因为如果我得到Class1 50%,Class2 49%,Class3 1%和Class4 0%,我真的不想用获胜类标记数据,因为前两个类的置信度之间的差异是太小了,所以我宁愿用两个类来标记数据(我知道对于大多数问题来说它并没有太大意义,但对于我的问题它确实如此)。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

一种方法可以是使用one-vs-all策略而不是one-vs-one,这是libsvm的默认策略。

这意味着如果您有4个类,则训练4个SVM,每个类决定,样本是属于一个类还是属于所有其他类。通过这种方式,您可以获得每个类概率该样本属于此类的可能性。