1

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

类别 1. 492 (14%)

类别 2. 574 (16%)

类别 3. 738 (21%)

第 4 类。164 (5%)

类别 5。369 (10%)

类别 6。123 (3%)

类别 7。1025 (30%)

所以我总共有 3585 个对象。

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

A. 扩展训练和测试 B. 交叉验证 C. 训练 D. 测试

我将我的数据分为训练和测试。通过进行 5 次交叉验证过程,我能够确定好的 C 和 Gamma。

但是我的结果很差(CV 大约是 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 正在做“一对一”(所以是一个二进制分类器),但是当我有多个类时我不知道如何处理它。

请你帮助我好吗 ?

预先感谢您的帮助。

4

1 回答 1

1

我以前遇到过同样的问题。我也尝试给他们不同的重量,但没有奏效。

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

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

我用了这个方法,准确率确实提高了。希望对你有帮助!

于 2017-03-06T00:40:22.963 回答