1

我一直在玩 SVM,偶然发现了一些有趣的东西。

这可能是我做错了,因此发表评论和澄清。

我有大约 3000 x 30 的数据集。

每个值都在 -100 到 100 的范围内。另外,它们不是整数。它们是浮点数。它们分布不均。

就像,数字是 -99.659、-99.758、-98.234,然后我们不会有像 -1.234、-1.345 这样的东西。

因此,即使范围很大,数据也会在某些点周围聚集,并且它们通常会因分数值而有所不同。
(我认为,从我的阅读和理解来看,这不应该在理想情况下影响 SVM 分类的准确性。如果我错了,请纠正我。请用是或否评论我是对还是错。

我的分类标签是 0 和 1。

所以,然后我拿了一个 30 x 30 的测试数据并尝试测试我的 SVM。

当 kernel_function 为 mlp 时,我的准确率约为 50%。

在其他方法中,我只是得到 0 和 NaN 作为结果,这很奇怪,因为输出中没有 1,而且我不理解输出标签中的 NaN。

所以,mlp 基本上给了我最好的结果,而且也只有 50%。

然后,我将该方法用作“QP”,将“mlp”用作 kernel_function,代码已经运行了大约 8 个小时。我不认为,像 3400 x 30 这样小的东西应该花费那么多时间。

所以问题真的是,对于我拥有的数据,SVM 是不是一个错误的选择?(如上所述)。还是我遗漏了什么导致准确性显着下降?

另外,我知道输入数据并没有搞砸,因为我使用神经网络进行了测试,并且能够获得非常好的准确性。

有没有办法让 SVM 工作?因为,从我在互联网上读到的内容来看,在这个标签决定问题上,SVM 通常应该比神经网络更好。

4

2 回答 2

1

听起来您可能会遇到一些由数据集群的小尺寸引起的数值稳定性问题(尽管我不确定为什么会这样:它确实不应该)。作为一种算法, SVM 不应该关心你所描述的分布:事实上,在正常情况下,当呈现出如此明显分离的东西时,它应该做得很好。

要调查的一件事是,您的任何列是否具有很强的相关性。出于性能原因,真正强相关的列组应该由单个列替换,并且我已经看到当面对列中几乎完美的相关性时,实现在数值上变得不稳定。

于 2012-07-31T17:18:49.473 回答
0

虽然独立特征很好,但对于算法来说并不是必需的,毕竟我们事先说我们不知道哪些特征对数据有什么贡献。你在扩展你的数据吗?此外,30 个数据点对于创建训练集来说可能有点小。我们可以看看你的代码吗?

于 2012-08-01T19:22:18.033 回答