libsvm 在 100K 行上训练非常慢,建议?

机器算法验证 支持向量机
2022-04-01 17:58:20

我正在尝试在 100K 行的训练集上运行 libsvm 提供的包装脚本 easy.py,每行有约 300 个特征。特征数据相对稀疏,比如只有 1/10 是非零值。

脚本非常慢,我说的是几天(或更多)。我在 1% 的数据上运行了相同的脚本,它在大约 20 分钟内完成,结果看起来很合理,所以看起来输入数据/格式是正确的,并且没有明显的问题。

我发现 libsvm 的文档有些缺乏,并且对性能等实际问题没有太大帮助。他们的常见问题解答对这些问题保持沉默: http ://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html

有没有人在 SVM 训练速度方面遇到过类似的问题?您是否知道在这种情况下尝试更合适的库或特定策略?

1个回答

我见过 liblinear 运行时对 tol 非常敏感;尝试 tol=.1,如果可能的话,线性不是 rbf。你有几节课?你有多少内存?用“top”之类的来监控真实/虚拟。

随机梯度下降, scikits.learn 中的 SGDClassifier很快例如,在 Mnist 手写数字数据上,10k 行 x 768 个特征,80% 的原始数据为 0,-= mean 和 /= std:

 12 sec  sgd        mnist28 (10000, 784)  tol 0.1  C 1  penalty l2  correct 89.6 %
321 sec  LinearSVC  mnist28 (10000, 784)  tol 0.1  C 1  penalty l2  correct 86.6 %

这是没有调整或交叉验证的;您的里程会有所不同。

补充:另见Sofia-ml - 评论任何人?

请张贴什么有效/什么无效。