【问题标题】:LibSVM - Multi class classification with unbalanced dataLibSVM - 具有不平衡数据的多类分类
【发布时间】:2017-05-26 08:37:11
【问题描述】:

我尝试使用 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 正在做“一对一”(所以是一个二进制分类器),但是当我有多个类时我不知道如何处理它。

你能帮帮我吗?

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的建议!我会考虑的!但是这样做会限制样本的数量,这太可惜了。或者您需要为最小的类别找到更多样本。
    • 你是对的。也许您可以使用不同的样本多次训练模型,避免某些样本的偏差并用完所有样本。平均准确性也将提供令人信服的结果。如果仍然不是您想要的,至少您会得到一个基线。
    猜你喜欢
    • 2014-09-08
    • 2020-10-23
    • 1970-01-01
    • 2015-01-28
    • 2016-04-02
    • 2020-02-01
    • 1970-01-01
    • 2021-02-26
    • 2020-03-01
    相关资源
    最近更新 更多