LibSVM - 具有不平衡数据的多类分类

时间:2017-01-11 13:57:05

标签: machine-learning classification svm libsvm multiclass-classification

我尝试使用libsvm和3D描述符来执行对象识别。到目前为止,我有7类对象,对于每个类别,我都有它的对象数量(及其pourcentage):

类别1. 492(14%)

类别2. 574(16%)

类别3. 738(21%)

类别4。 164(5%)

类别5。 369(10%)

类别6。 123(3%)

Category7。 1025(30%)

所以我总共有3585个物品。

我遵循了libsvm的实用指南。 这里有提醒:

一个。扩展培训和测试 B.交叉验证 C.培训 D.测试

我将数据分成培训和测试。 通过5交叉验证过程,我能够确定好的C和Gamma。

然而,我获得了不良结果(简历约为30-40,我的准确率约为50%)。

然后,我在考虑我的数据并发现我有一些不平衡的数据(例如类别4和6)。我发现在libSVM上有一个关于权重的选项。这就是为什么我现在想要设置好的权重。

到目前为止,我这样做了:

svm-train -c cValue -g gValue -w1 1 -w2 1 -w3 1 -w4 2 -w5 1 -w6 2 -w7 1

但结果是一样的。我确定不是这样做的好方法,这也是我问你一些帮助的原因。 我看到了关于这个主题的一些主题,但它们与二进制分类有关,而不是多类分类。 我知道libSVM正在做一个对抗一个" (所以这是一个二元分类器)但是当我有多个班级时,我不知道要处理它。

你能帮我吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我以前遇到过同样的问题。我也尝试给他们不同的重量,这是不起作用的。

我建议您使用数据集的子集进行训练。

尝试使用大致相同数量的不同类别样本。您可以使用所有4类和6类样本,然后为每个其他类别选择约150个样本。

我使用这种方法,准确度确实提高了。希望这会对你有所帮助!