【问题标题】:svm.sparse.SVC taking a lot of time to get trainedsvm.sparse.SVC 花费大量时间来接受培训
【发布时间】:2013-02-15 18:35:27
【问题描述】:

我正在尝试在 scikit-learn 中训练 svm.sparse.SVC。目前特征向量的维度约为 70 万,用于训练的特征向量数量为 20k。我使用 csr 稀疏矩阵提供输入,因为每个特征向量中只有大约 500 个维度是非零的。该代码自过去 5 小时以来一直在运行。有没有估计需要多少时间?有什么方法可以更快地进行训练吗?内核是线性的。

【问题讨论】:

    标签: python svm scikit-learn


    【解决方案1】:

    尝试使用sklearn.svm.LinearSVC。这也有一个线性内核,但底层实现是liblinear,已知它更快。考虑到这一点,您的数据集并不是很小,因此即使是这个分类器也可能需要一段时间。


    在第一条评论后编辑: 我认为您有多种选择,但都不是完美的:

    • 非解决方案选项:收工,希望svm.sparse.SVC 的培训明天早上结束。如果可以的话,买一台更好的电脑。
    • 作弊选项:放弃概率。您还没有告诉我们您的问题是什么,因此它们可能不是必需的。
    • 背靠墙选项:如果您绝对需要概率并且事情必须运行得更快,请使用不同的分类器。选项包括sklearn.naive_bayes.*sklearn.linear_model.LogisticRegression。等等。这些会更快地训练,但你付出的代价是准确性有所降低。

    【讨论】:

    • 我需要概率估计,而 LinearSVC 不提供(predict_proba 函数)。现在有什么建议吗?
    • svm.sparse.SVC 具有二次到三次的复杂度,因此不能用于样本超过约 50000k 的数据集。更好的计算机无法解决二次到三次的复杂度。
    • 只是为了使分类器模型清晰,可扩展 w.r.t。样本数量为:sklearn.linear_model.LogisticRegression、sklearn.svm.LinearSVC、sklearn.linear_model.SGDClassifier(及相关)和sklearn.bayes.MultinomialNB。
    • @user2115183 对于线性内核,使用svm.SVC 几乎不是一个好主意。使用逻辑回归。
    猜你喜欢
    • 2016-06-21
    • 2018-01-10
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2023-03-11
    • 2016-01-31
    相关资源
    最近更新 更多