从 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.
的可能性有多大
我正在使用 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.
的可能性有多大