2013-07-03 228 views
3

我在5x2交叉验证中使用Libsvm对非常大量的数据进行分类,也就是说,我有47k样本用于训练,47k样本用于10种不同配置的测试。libsvm中的大型培训和测试数据

我通常使用LIBSVM的剧本easy.py来对数据进行分类,但它采取了这么久,我一直在等待结果,超过3小时,没事的,我还是要重复此过程更9次!

是否有人知道如何更快地使用libsvm和非常大量的数据? C++ Libsvm函数的工作速度是否比python函数快?

回答

6

LibSVM的训练算法不能扩展到这种类型的数据集;在最坏的情况下需要O(n³)时间,在典型的情况下需要O(n²)。首先要尝试的是正确缩放数据集;如果仍然不能正常工作,请切换到

+0

感谢您的回答,但是如果我使用带线性内核的libsvm(例如带参数t 0的-svmtrain),我使用的是线性svm,因此运行时间会很低? – mad

+1

@mad:没有。您将使用相同的慢速SMO算法。这就是为什么LibSVM的作者发布了Liblinear,它可以用一个坐标下降算法来拟合(几乎)同一种模型。 –

3

正如larsmans所提到的,根据数据的维度和数据点的数量,libsvm可能无法很好地进行缩放。

C实现可能会运行得更快一些,但它不会有重大区别。你有几个选项可供你使用。

  • 你可以随机抽取你的数据来处理它的一小部分。
  • 您可以使用类似PCA
  • 将您的数据投影到较低维度根据您的数据类型,您可以查看不同的内核。直方图交叉核心会为您的数据生成吗?当你真的需要一个线性决策函数时,你使用的是一个RBF内核吗?

希望这有助于!机器学习中最棘手的问题之一是应对有时需要的纯数据量。

0

easy.py是一个用于训练和评估分类器的脚本。它使用grid.py为SVM参数执行元素校准。在grid.py中是一个参数“nr_local_worker”,它定义了多个线程。你可能希望增加它(检查处理器负载)。