【发布时间】:2013-06-11 04:24:08
【问题描述】:
我有 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)。我应该如何设置这个值
谢谢
【问题讨论】:
-
那么如果你检查并说样品3不在1类中,你是否把它放在0类中,即使它是2类的例子?换句话说,是否有任何样本出现在多个类中?
-
当然不是,可能会发生来自两个类别的两个样本在 60% 的特征向量值上相似,但绝不会发生来自特定类别的样本出现在另一个类别中...
-
我明白了,我只是确保这不是 0 类样本量巨大的原因。默认情况下,权重为 1,您可能必须使用验证集尝试一些不同的值。不幸的是,w 参数在每个类的基础上修改 C,这也会影响低维空间中决策边界的正则化/平滑度。您现在可以将其他类保留为 1,然后开始减少类 0 的 w。如果类 0 不像训练数据中那样普遍,则需要使用 -wi 选项。否则你并没有真正达到 99.8% 的准确率。
标签: visual-studio-2010 opencv machine-learning libsvm