7.
\ begingroup美元

我试图创建和测试非线性支持向量机与各种核(RBF, Sigmoid,多项式)在scikit-learn,以创建一个模型,可以分类异常和良性行为。

我的数据集包含692703条记录,我使用75/25%的培训/测试分裂。此外,我使用的各种特征组合,其维度在1到14个特征之间。然而,各种SVM的培训过程需要太长。这是合理的吗?通过将N_JOBS参数配置为-1,我还与非线性SVMS结合使用了集合BaggingClassifier。尽管如此,培训过程再次慢慢进行。

我怎样才能加快培训进度呢?

提前致谢

$ \ endgroup $
2
3.
\ begingroup美元

最可能的解释是您正在使用太多的SVM实现培训示例。

支持向量机是基于a核函数。大多数实现都显式地将其存储为训练点之间距离的NxN矩阵,以避免反复计算条目。

在您的例子中,70万个例子中的75%需要大约250GB的RAM来存储,这比您在消费硬件中可能拥有的内存要多。

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

处理这件事更好的办法是都不使用因为从支持向量机的角度来看,大多数数据都是冗余的(只有在决策边界附近拥有更多数据才对支持向量机有利)。一个好的开始是随机丢弃90%的训练数据,看看性能如何。

$ \ endgroup $
    1
    \ begingroup美元

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

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

    $ \ endgroup $
      1
      \ begingroup美元

      为了快速训练支持向量机,你可以尝试使用线性支持向量机或使用缩放数据。

      来源:https://www.researchgate.net/publication/2926909_A_Practical_Guide_to_Support_Vector_Classification_Chih-Wei_Hsu_Chih-Chung_Chang_and_Chih-Jen_Lin

      $ \ endgroup $
      1
      • \ begingroup美元 嗨,你要知道,这些链接可能会在一段时间后出现404页面,所以如果你可以的话,复制重要的部分并在你的答案中引用。 $ \ endgroup $-Anshuman库马尔 4月22日'20 9:15
      0.
      \ begingroup美元

      因为您使用维度在1到14个功能之间的各种功能组合,所以您可能会尝试使用线性SVM(线性内核)对您的问题有利。您可以尝试Liblinear库,但数据应线性可分离,否则测试精度将非常低。

      $ \ endgroup $
        0.
        \ begingroup美元

        你可以通过以下几个步骤来加快训练时间:

        1. 缩放功能的值
        2. 只使用有限数量的特性,因为这会影响训练时间;例如,当你使用14个特征时,这意味着你的模型有14个维度,这使得计算更复杂,花费更多时间。
        3. 选择合适的核,线性支持向量机核通常给出最快的结果
        $ \ endgroup $

          你的答案

          点击“发布答案”,您同意我们的同意服务条款隐私政策Cookie政策

          不是您要找的答案?浏览其他标记的问题必威英雄联盟或者必威电竞问你自己的问题