我一直在玩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通常应该比神经网络更好地工作。
答案 0 :(得分:1)
听起来你可能会遇到一些数据稳定性问题,这些问题是由数据集群的小尺寸引起的(尽管我不确定为什么会这样:它确实不应该这样)。 SVM不应该关注你所描述的分布的算法:事实上,在正常情况下,当它呈现出明显分离的东西时,它应该做得非常好。
要研究的一件事是,您的任何列是否具有非常强的相关性。出于性能原因,真正强相关的列组应该由单个列替换和我已经看到在面临几乎完美的列相关时,实现在数值上不稳定。
答案 1 :(得分:0)
虽然独立功能很好,但这对于算法来说并不是必需的,毕竟我们事先说过,我们不知道哪些功能会为数据提供什么 。你在扩展你的数据吗?此外,30个数据点可能有点小,无法创建训练集。我们能看到您的代码吗?