使用 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 分类分数的主要内容,如果未能解决你的问题,请参考以下文章