使用 OpenCV 在多类分类中获取 SVM 分类分数

Posted

技术标签:

【中文标题】使用 OpenCV 在多类分类中获取 SVM 分类分数【英文标题】:Get SVM classification score in multiclass classification with OpenCV 【发布时间】:2013-11-17 13:56:11 【问题描述】:

我正在做一个项目,我在 OpenCV 中使用 SVM 进行多类分类。

我的目标是获得分类的置信度分数以及预测的类。 我怎样才能做到这一点?现在我正在做类似的事情

float result = mysvm.predict(sample);

拥有相当多的课程,我宁愿避免进行大量的一对多分类,然后计算分数。

由于 OpenCV SVM 是使用 LibSVM 实现的,我很确定有办法做到这一点,但查看 http://docs.opencv.org/modules/ml/doc/support_vector_machines.html 并没有真正的帮助。

感谢您提供的任何意见。

【问题讨论】:

【参考方案1】:

opencv/include/opencv2/ml/ml.hpp中,有一个名为CvSVMDecisionFunc的结构体。它已在546行中使用过em> 作为受保护的变量

CvSVMDecisionFunc* decision_func;

你需要做的是剪下那条线并将其粘贴为 Public 然后对 OpenCV 进行完全重建。这个变量 decision_func 包含所有数据对于特定的支持向量(即 alpha 和 rho 值)..

【讨论】:

这看起来是一个非常激进的方法,如果我真的找不到其他方法来解决我的问题,我会这样做。我已经看到 predict() 函数中的 bool returnDFVal=false 可以满足我的需要,但仅用于二进制分类。没有办法获得它进行多类分类? 好的,因为我浪费了足够的时间试图找出更好的方法来做到这一点,所以我按照建议做了并重建了我的 OpenCV,将决策函数结构设置为公共。不过,我在理解它的价值观时遇到了一些困难。我有- rho: -0.9667...- sv_count: 1- alpha: 1.00...- sv_index: 0不是我所期望的......我不应该有一些支持向量,即我用于分类的类的数量吗? 好吧,我不知道如何使用returnDFVal 解决多类问题。关于sv_count,你是对的;它应该与类的数量一致(在这种情况下,您在 SVM 训练阶段提供的标签)。一般情况下,我尝试将 -1.0 用于负样本和单点正样本其余的浮动.. @powder 你可以避免重建 OpenCV。由于decision_func 受到保护,您可以扩展CvSVM 类并从扩展类访问该变量。这种方式比较好。

以上是关于使用 OpenCV 在多类分类中获取 SVM 分类分数的主要内容,如果未能解决你的问题,请参考以下文章

Encog中的多类SVM分类

在 CNN 提取特征之上使用 SVM - 如何进行多类分类?

如何在多类文本分类问题中平衡数据?

使用深度学习防止在多类分类中过度拟合特定类

将SVM用于多类分类

未知标签类型:在多类分类问题上使用随机森林分类器时“连续”