3

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

我通常使用 Libsvm 的脚本easy.py来分类数据,但是太费时间了,等了3个多小时都没结果,还要再重复这个过程9次!

有谁知道如何在处理大量数据时更快地使用 libsvm?C++ Libsvm 函数比 python 函数工作得更快吗?

4

3 回答 3

6

LibSVM 的训练算法无法扩展到此类数据集;在最坏的情况下需要 O(n³) 时间,而在典型情况下需要 O(n²) 左右。首先要尝试正确扩展数据集;如果还是不行就切换到

于 2013-07-03T20:42:56.143 回答
3

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

C 实现可能会运行得更快一些,但不会有显着差异。您有几个可用的选项。

  • 您可以随机抽样数据以处理其中的一小部分。
  • 您可以使用PCA 之类的方法将数据投影到较低维度
  • 根据您的数据类型,您可以查看不同的内核。直方图交叉核是否适用于您的数据?当您真的只需要线性决策函数时,您是否使用 RBF 内核?

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

于 2013-07-03T20:47:53.540 回答
0

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

于 2013-08-29T11:25:51.143 回答