【发布时间】: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