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

Get the top n classes and the corresponding confidence level from the libSVM package

我正在使用 libsvm 库 (https://www.csie.ntu.edu.tw/~cjlin/libsvm/) class验证一些数据。

这是我用于预测的语法:

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

根据我的理解 prob_estimates 是这样计算的:如果你有以下 classes : (class 1, 2, 3, 4),算法执行以下操作比较:

1对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% 等等

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

有什么解决办法吗?

一种方法是使用一对多策略而不是一对一,这是 libsvm 的默认设置。

这意味着如果你有 4 个 classes,你训练 4 个支持向量机,每个 class 决定样本属于一个 class 还是所有其他 class是的。这样你就可以为每个 class 得到一个概率,这个样本属于这个 class.

的可能性有多大