我尝试使用libsvm和3D描述符来执行对象识别。到目前为止,我有7类物体,每个类别我都有它的物体数量(和它的重量):
类别1。492(14%)
类别2。574(16%)
类别3。738(21%)
类别4.164(5%)
类别5.369(10%)
类别6.123(3%)
类别71025(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和6的样本,然后每隔一个类别提取大约150个样本。
我用了这个方法,准确度确实提高了。希望这对你有帮助!