在libsvm中训练不平衡数据

时间:2013-06-14 13:39:31

标签: visual-studio-2010 opencv machine-learning libsvm

我有25个班级,0班级包括所有其他24个班级的所有阴性样本,所以这个班级的样本数量远远大于其他班级(例如10倍大,因为它应该包括所有的阴性样本来自其他24个班级)

现在我的问题是,当我想训练这个数据集时,我该怎么办?

必须使用libsvm推出的unbalaced培训选项吗? -w0 1 -w1 ....

我的意思是强制性是否使用此选项?

因为当我训练数据没有这个选项时,它为分离类提供了99.8%的准确度,当我测试这个准确的模型时!对于某些课程,我获得100%的准确性,而对于其他一些课程,我得到0.0%!!!

我的意思是对于某些课程,它不会错过任何样本,但对于另一个课程,它将始终返回0!这意味着它是一个负面样本!!!

我想使用此选项,但我不知道它的规则。我的意思是如何使用此选项为类设置值?

假设每个类中的样本数量为:

0级 - > 3433

第1类 - > 745

第2类 - > 232

第3类 - > 53

。 。 。 第23类 - > 975

如果我在[0,1]或[-1 1]或(-inf + inf)或者什么之间缩放它们,我应该如何设置每个类的wi?

摘要>

1)。是否必须为我的数据集使用-wi选项?

2)。我该如何设置此值

由于

3 个答案:

答案 0 :(得分:0)

无法评论,所以我会把它写成答案:

两个建议:

  1. 减少class0的重量
  2. 或采用两步法:
    • 结合其他24个班级的所有示例,将它们视为一个班级, 并构建二元分类器
    • 仅针对正面示例构建24路分类器。如果最后一步的分类结果是肯定的,请使用它。

答案 1 :(得分:0)

由于每个类都有+ ve和-ve数据,因此应该训练24个二进制分类器。 然后,当您输入测试用例时,如果有多个SVM具有正预测,请选择分类器具有最高输出概率的类。

如果您使用LIBSVM设置多类SVM,则在内部它只会训练多个二进制SVM。因此,自己明确设置24个SVM并不奇怪。

答案 2 :(得分:0)

这不是强制性的,取决于您的数据。如果您的课程很容易分开,则没有必要。从没有重量开始,看看confusion matrix。如果你的错误介于拥挤的班级和稀疏班级之间,那么对重量的调整可能有所帮助。