libsvm中的大型培训和测试数据

时间:2013-07-03 20:24:12

标签: python c++ svm libsvm

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

我通常使用Libsvm的脚本 easy.py 来对数据进行分类,但是这需要很长时间,我已经等待了超过3个小时的结果,而且我仍然需要重复这个程序9次!

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

正如larsmans所提到的,libsvm可能无法很好地扩展,具体取决于数据的维度和数据点的数量。

C实现可能会运行得更快,但它不会有显着差异。您有几个选择。

  • 您可以随机抽样数据以处理其中的一小部分。
  • 您可以使用类似PCA
  • 的内容将数据投影到较低的维度
  • 根据您的数据类型,您可以查看不同的内核。直方图交叉核可以为您的数据工作吗?当你真的只需要一个线性决策函数时,你在使用RBF内核吗?

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

答案 2 :(得分:0)

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