为什么训练 SVM 需要这么长时间?我怎样才能加快速度?

人工智能 机器学习 训练 支持向量机
2021-10-23 00:17:40

我正在尝试在 scikit-learn 中创建和测试具有各种内核(RBF、Sigmoid、多项式)的非线性 SVM,以创建一个可以对异常和良性行为进行分类的模型。

我的数据集包括 692703 条记录,我使用 75/25% 的训练/测试拆分。此外,我使用了维度在 1 到 14 个特征之间的各种特征组合。然而,各种 SVM 的训练过程花费的时间太长了。这合理吗?

我还通过将参数BaggingClassifier配置为 ; 结合非线性 SVM检查了集成然而,训练过程再次进行得太慢了。n_jobs-1

如何加快培训过程?

4个回答

最可能的解释是您在 SVM 实施中使用了太多训练示例。

SVM 基于核函数大多数实现将其显式存储为训练点之间距离的 NxN 矩阵,以避免一遍又一遍地计算条目。

在您的情况下,对于 700,000 个示例中的 75%,此矩阵将需要大约 250GB 的 RAM 来存储,这比您在消费类硬件中可能拥有的要多。

如果您的 SVM 实现可以避免缓存值,那么您可能会以这种方式获得加速,或者您可能不会(您将浪费大量时间重新计算它们)。

解决这个问题的更好方法是不使用所有数据,因为从 SVM 的角度来看,大部分数据都是多余的(它只受益于在决策边界附近拥有更多数据)。一个好的起点是随机丢弃 90% 的训练数据,然后看看性能如何。

我认为你应该使用线性内核,因为使用线性内核训练 SVM 比使用另一个内核更快,尤其是对于文本分类。祝你好运

https://www.svm-tutorial.com/2014/10/svm-linear-kernel-good-text-classification/

因为您使用维度在 1 到 14 个特征之间的各种特征组合,您可能会尝试使用线性 SVM(线性内核)对您的问题有好处。您可以尝试 LIBLINEAR 库,但数据应该是线性可分的,否则测试准确度会非常低。