【问题标题】:sklearn and SVMs with polynomial kernel具有多项式内核的 sklearn 和 SVM
【发布时间】:2014-04-28 16:01:25
【问题描述】:

我正在使用 sklearn for python 使用 SVM 执行交叉验证。我尝试使用线性和 rbf 内核,一切正常。当我用多项式内核运行它时,虽然它永远不会完成。它已经运行了8个小时,仍然没有。输入X的维数是(1422, 2)

def SupportVectorMachines(X,y):
     clf = svm.SVC(C=1.0, kernel='poly', degree=3, gamma=2)
     classifier = clf.fit(X,y)
     score = cross_validation.cross_val_score(classifier, X,y, cv=10, n_jobs=1).mean()
     return score

有什么想法吗?

谢谢

【问题讨论】:

  • 你标准化输入了吗? SVM 可能对此非常挑剔,尤其是 poly kernel 存在数值稳定性问题。
  • 是的,我做到了。还是不行。我尝试了标准化输入和非标准化输入
  • 嗯。好吧,在最坏的情况下,SVM 训练可能需要立方时间。您是否尝试过在cross_val_score 上设置verbose=2,看看它是否可以在 8 小时内至少训练一个 SVM?
  • 仍然卡住了。没有打印任何东西
  • 恐怕我没主意了;我从不使用内核 SVM,因为它们的训练时间很难估计(尽管在 1422×2 数据集上,8 小时非常极端)。

标签: python scikit-learn svm


【解决方案1】:

尝试降低 C(尝试 C= 0.001,0.01,0.1)。 C 是惩罚参数,随着 C 变大,模型会尝试减少惩罚,因此需要更多时间来训练。

或者,尝试减少交叉验证折叠的数量。由于数据集仅包含 1422 个点,请尝试使用 cv=5。这将需要更短的运行时间。

【讨论】:

    【解决方案2】:

    尝试设置(max_iter = 1e5)。

    类似:

        clf = svm.SVC(C=1.0, kernel='poly', degree=3, gamma=2,max_iter = 1e5)
    

    它给出以下错误,但终止:

        /usr/local/lib/python3.6/dist-packages/sklearn/svm/_base.py:231: ConvergenceWarning: Solver terminated early (max_iter=100000).  Consider pre-processing your data with StandardScaler or MinMaxScaler.  % self.max_iter, ConvergenceWarning)
    

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 2014-05-08
      • 2019-08-23
      • 2017-08-11
      • 2012-09-28
      • 2018-04-16
      • 2015-06-24
      • 2020-02-18
      • 2021-10-15
      相关资源
      最近更新 更多