0

我有 25 个类,第 0 类包含所有 24 个其他类的所有负样本,因此该类中的样本数量比其他类大得多(例如,大 10 倍,因为它应该包括 24 个中的所有负样本其他类)

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

是否必须使用 libsvm 提供的不平衡训练选项?-w0 1 -w1 ....

我的意思是是否必须使用此选项?

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

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

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

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

0级-> 3433

1 级 -> 745

2 级 -> 232

3 级 -> 53

. . . 23 级 -> 975

我应该如何为每个班级设置 wi 我应该在 [0,1] 或 [-1 1] 或 (-inf +inf) 之间缩放它们还是什么?

总结 >

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

2)。我应该如何设置这个值

谢谢

4

3 回答 3

0

无法发表评论,所以我将其写为答案:

两个建议:

  1. 减少class0的权重
  2. 或采用两步法:
    • 结合其他 24 个类的所有示例,将它们视为一个类,并构建一个二元分类器
    • 只为正例构建一个 24 路分类器。如果上一步的分类结果是肯定的,则使用它。
于 2013-06-14T19:48:30.100 回答
0

这不是强制性的,这取决于您的数据。如果您的班级很容易分开,则没有必要。开始没有重量,看看混淆矩阵。如果您的错误介于拥挤类和稀疏类之间,则对权重进行一些调整可能会有所帮助。

于 2013-08-29T15:30:19.160 回答
0

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

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

于 2013-06-15T15:12:28.563 回答