使用LIBSVM grid.py来处理不平衡数据?

时间:2012-07-10 09:10:45

标签: machine-learning libsvm text-mining svm

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

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

我尝试修改重量参数-w但没有太大成功。

所以我想要的是,修改grid.py的方式是优化Cost和gamma,以便精确度和召回按类别而不是整体精度分开。有没有办法做到这一点?或者是否有其他脚本可以做这样的事情?

4 个答案:

答案 0 :(得分:8)

-w参数是不平衡数据所需的参数。到目前为止你尝试了什么?

如果您的课程是:

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

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

-w0 5 -w1 90 -w2 90

答案 1 :(得分:4)

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

最小化AUC可能会比重新加权训练样本提供更好的结果。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

我认为你还应该优化伽马和成本,同时使用不同的类权重配置。我修改了" get_cmd"通过为此目的传递不同的类权重(-wi weight)来在grid.py中起作用。根据我的经验,班级加权并不总是有帮助。