performance - 为什么 sklearn LDA 转换非常慢?
问题描述
我正在使用sickit-learn Latent Dirichlet Allocation 进行主题建模。lda_object 适合文本语料库。现在,我们将其拟合到一个文本中以了解它的主题权重。
def append_lda_features(df, lda_vectorizer, tfidf+vector):
from time import time
st = time()
lda_vector = lda_vectorizer.transform(tfidf_vector)
print(time() - st)
lda_vector = pd.DataFrame(lda_vector)
lda_vector.columns = ['lda_word_'+str(i)
for i in range(lda_vectorizer.n_components)]
return pd.concat([df, lda_vector], axis=1)
这是大约几秒钟的打印值0.67
,非常高。考虑到我的 lda 只包含 15 个组件,而 vectorizer 有 100000 个标记:
LatentDirichletAllocation(n_components=15, n_jobs=30, verbose=1)
我应该怎么做才能使 LDA 工作得更快?
解决方案
当您要lda
在单个文本向量上转换 时,最好不要设置n_jobs = 1
.
这样一来,它就不需要那么多时间,因为它不需要首先并行化工作。这显然需要明显的开销。
def append_lda_features(df, lda_vectorizer, tfidf+vector):
from time import time
st = time()
lda_vectorizer.n_jobs = 1
lda_vector = lda_vectorizer.transform(tfidf_vector)
print(time() - st)
lda_vector = pd.DataFrame(lda_vector)
lda_vector.columns = ['lda_word_'+str(i)
for i in range(lda_vectorizer.n_components)]
return pd.concat([df, lda_vector], axis=1)
这个给了我0.01
几秒钟,而不是0.6
推荐阅读
- c - 为什么我的程序可以使用 for 但现在使用 while 循环?
- node.js - 为什么需要在 Linux 上才能在 Nodejs 上构建网站并做出反应?
- c# - 当我想获得输入时出现错误
- python-3.x - 尝试使用音乐数据进行迁移学习
- python - 如何在 python 3.8 中安装 opencv-python
- javascript - ReferenceError:“未定义 Swal”
- python - 在谷歌 colab 中从 spacy 中移出
- c++ - 数组何时自动初始化为其默认数据类型?
- python - 单调序列中的索引问题
- python - 如何创建一个新列,其值是现有 ByteArray 列的十六进制字符串?