将 LIBSVM grid.py 用于不平衡数据?

Posted

技术标签:

【中文标题】将 LIBSVM grid.py 用于不平衡数据?【英文标题】:Using LIBSVM grid.py for unbalanced data? 【发布时间】:2012-07-09 17:44:06 【问题描述】:

我遇到了不平衡数据(90%、5%、5%)的三类问题。现在我想使用 LIBSVM 训练一个分类器。

问题在于 LIBSVM 优化其参数 gamma 和 Cost 以获得最佳准确度,这意味着 100% 的示例被归类为 1 类,这当然不是我想要的。

我试过修改权重参数 -w 没有多大成功。

所以我想要的是,修改 grid.py 以优化 Cost 和 gamma 以实现按类分离的精度和召回率,而不是整体精度。有没有办法做到这一点?还是有其他脚本可以做这样的事情?

【问题讨论】:

【参考方案1】:

-w 参数是不平衡数据所需要的。到目前为止,您尝试过什么?

如果您的课程是:

0 级:90% 1 类:5% 2 类:5%

您应该将以下参数传递给 svm:

-w0 5 -w1 90 -w2 90

【讨论】:

谢谢,但我认为应该反过来:-w0 5 -w1 90 -w2 90,因为较小的班级应该有更多的相关费用..这个有帮助!跨度> 是的,我认为你是对的。我刚刚编辑了我的问题。谢谢! 而当你有超过3个类的时候,你怎么能对每个w的值进行属性化呢?【参考方案2】:

如果您想尝试替代方案,svmlight 系列中的一个程序http://www.cs.cornell.edu/people/tj/svm_light/svm_rank.html 直接最小化 ROC 曲线下的面积。

最小化 AUC 可能比重新加权训练示例得到更好的结果。

【讨论】:

svmlight 对商业不友好;它仅供学术使用。【参考方案3】:

您可以使用grid.py 优化任何精度、召回率、F-score 和 AUC。调整是您必须更改 svm-train 在 LIBSVM 中使用的交叉验证评估度量。关注procedure given on LIBSVM website。

【讨论】:

【参考方案4】:

如果您有不平衡的数据,您可能不应该优化准确性。而是优化 f 分数(或回忆,如果这对您更重要)。您可以按照here 的描述更改评估函数。

我认为您还应该优化 gamma 和 Cost,同时使用不同的类权重配置。为此,我通过传递不同的类权重(-wi weight)修改了 grid.py 中的“get_cmd”函数。根据我的经验,班级加权并不总是有帮助。

【讨论】:

以上是关于将 LIBSVM grid.py 用于不平衡数据?的主要内容,如果未能解决你的问题,请参考以下文章

libsvm使用总结

如何利用python使用libsvm

如何利用python使用libsvm

如何利用python使用libsvm

如何利用python使用libsvm

训练时间和在 libsvm 中使用 gamma 和 C 过拟合