【问题标题】:Sklearn: How to speed up Decision functionSklearn:如何加快决策功能
【发布时间】:2016-12-20 09:15:24
【问题描述】:

我正在通过使用 HashingVectorizer [(n_features=2**24,binary=True,ngram_range=(1,2)] 在 Sklearn 中训练 4709 个单独的二元逻辑回归分类器来实现多标签文本分类。

准确度很好,但预测延迟很大。学习矩阵的平均稀疏比为 0.967,矩阵的形状为 (1, 16777216)。使用内置 predict_proba 函数,一个条目的预测时间为 147.9 秒(在配备一个 Intel Xeon E5 2630v4 的服务器上)。大部分时间(80%)都花在了 scipy sparse csc_tocsr 函数上。

当我使用以下方法预处理矩阵时:

cf[i] = sparse.csr_matrix(clf.coef_.T)

并直接通过

推断概率(我不需要归一化,只需要概率的顺序)
prob[i] = x*cf[i]

推断 407 (10%) 个分类器只需要 0.043 秒,但内存消耗为 25GB,因此我需要大约 250GB 的 RAM 才能将所有分类器保存在内存中。

有没有什么方法可以在保持矩阵稀疏的同时加快决策函数的速度,或者有什么其他的预处理方式会占用更少的内存。

【问题讨论】:

    标签: scipy scikit-learn sparse-matrix matrix-multiplication


    【解决方案1】:

    为了回答我的问题,我找到了一个简单的解决方案。所有所有系数矩阵都可以组合(堆叠)为一个,即被转置并用于推理。所以加载/准备代码是:

    coefs = sparse.vstack([c.coef_ for c in clfs])
    coefs = coefs.T
    

    其中 clfs 是逻辑回归分类器(但它适用于所有线性分类器)。推理代码很简单

    x = vectorizer.fit_transform([q])
    r = x*coefs
    

    在我的 4709 分类器中,推理时间不到 1/10 秒。

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 2013-10-04
      • 2013-03-13
      • 2017-12-21
      • 2020-09-25
      • 2018-05-24
      • 2020-07-26
      • 2018-09-06
      • 2019-03-04
      相关资源
      最近更新 更多