我有三类不平衡数据的问题(90%,5%,5%)。现在我想用LIBSVM训练一个分类器。
问题在于LIBSVM优化其参数gamma和Cost以获得最佳准确度,这意味着100%的示例被归类为class 1,这当然不是我想要的。
我尝试修改重量参数-w但没有太大成功。
所以我想要的是,修改grid.py的方式是优化Cost和gamma,以便精确度和召回按类别而不是整体精度分开。有没有办法做到这一点?或者是否有其他脚本可以做这样的事情?
答案 0 :(得分:8)
-w参数是不平衡数据所需的参数。到目前为止你尝试了什么?
如果您的课程是:
您应该将以下参数传递给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中起作用。根据我的经验,班级加权并不总是有帮助。