【问题标题】:SVC classifier taking too much time for trainingSVC 分类器花费太多时间进行训练
【发布时间】:2019-05-25 04:48:44
【问题描述】:

我正在使用带有线性内核的 SVC 分类器来训练我的模型。 训练数据:42000 条记录

    model = SVC(probability=True)
    model.fit(self.features_train, self.labels_train)
    y_pred = model.predict(self.features_test)
    train_accuracy = model.score(self.features_train,self.labels_train)
    test_accuracy = model.score(self.features_test, self.labels_test)

训练我的模型需要 2 个多小时。 难道我做错了什么? 还有,可以做些什么来改善时间

提前致谢

【问题讨论】:

  • 每个训练样例有多少特征?
  • 其实数据是文本数据。每条记录的文本大小从 100 到 200 个字不等。
  • 你在使用某种 word2vec 吗?如果是,检查嵌入维度
  • 不,使用 tfidfVectorizo​​r。不是 word2Vec。

标签: machine-learning deep-learning data-science


【解决方案1】:

有几种方法可以加快您的 SVM 训练。设n 为记录数,d 为嵌入维数。我假设你使用scikit-learn

  • 减少训练集大小。引用docs

    拟合时间复杂度超过样本数量的二次方,这使得很难扩展到具有超过 10000 个样本的数据集。

    O(n^2) 复杂性很可能会主导其他因素。因此,为训练采样较少的记录将对时间产生最大的影响。除了随机抽样,您还可以尝试instance selection 方法。比如最近有人提出principal sample analysis

  • 降维。正如其他人在他们的 cmets 中所暗示的那样,嵌入维度也会影响运行时间。计算线性核的内积在O(d)。因此,Dimensionality reduction 也可以减少运行时间。在another question 中,潜在语义索引专门针对 TF-IDF 表示提出了建议。

  • 参数。除非您需要概率,否则请使用 SVC(probability=False),因为它们“会减慢该方法的速度。”(来自文档)。
  • 实施。据我所知,scikit-learn 只包含 LIBSVM 和 LIBLINEAR。我在这里推测,但您可以通过使用高效的 BLAS 库(例如 Intel 的 MKL)来加快速度。
  • 不同的分类器。你可以试试sklearn.svm.LinearSVC,就是……

    [s]与参数 kernel='linear' 的 SVC 类似,但根据 liblinear 而不是 libsvm 实现,因此它在选择惩罚和损失函数方面具有更大的灵活性,并且应该更好地扩展到大量样本。

    此外,一位 scikit-learn 开发人员在 similar question 中建议了 kernel_approximation 模块。

【讨论】:

  • @Deepankar 如果您觉得它有用,除了接受它之外,请考虑支持我的回答。谢谢:)
【解决方案2】:

尝试使用以下代码。我在训练数据的大小相似时遇到了类似的问题。 我将其更改为关注,响应速度更快

model = SVC(gamma='auto') 

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但缩放数据解决了这个问题

    # Feature Scaling
    from sklearn.preprocessing import StandardScaler
    sc = StandardScaler()
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)
    

    【讨论】:

      【解决方案4】:

      您可以尝试使用算法的加速实现 - 例如 scikit-learn-intelex - https://github.com/intel/scikit-learn-intelex

      对于 SVM,您肯定能够获得更高的计算效率。

      第一个安装包

      pip install scikit-learn-intelex
      

      然后添加你的python脚本

      from sklearnex import patch_sklearn
      patch_sklearn()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-17
        • 2020-05-12
        • 2020-05-19
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多