我正在使用 sklearn 的 NMF 和 LDA 子模块来分析未标记的文本。我阅读了文档,但我不确定这些模块(NMF 和 LDA)中的转换函数是否与 R 主题模型中的后验函数相同(请参阅 Predicting LDA topics for new data )。基本上,我正在寻找一个函数,它允许我使用在训练集数据上训练的模型来预测测试集中的主题。我在整个数据集上预测了主题。然后我将数据分成训练集和测试集,在训练集上训练模型并使用该模型转换测试集。尽管预计我不会得到相同的结果,但比较两个运行主题并不能保证转换函数与 R 的包具有相同的功能。我会很感激你的回应。
谢谢你
最佳答案
在transform
模型上对LatentDirichletAllocation
的调用将返回未规范化的文档主题分布。要获得适当的概率,您可以简单地对结果进行归一化。下面是一个例子:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.datasets import fetch_20newsgroups
import numpy as np
# grab a sample data set
dataset = fetch_20newsgroups(shuffle=True, remove=('headers', 'footers', 'quotes'))
train,test = dataset.data[:100], dataset.data[100:200]
# vectorizer the features
tf_vectorizer = TfidfVectorizer(max_features=25)
X_train = tf_vectorizer.fit_transform(train)
# train the model
lda = LatentDirichletAllocation(n_topics=5)
lda.fit(X_train)
# predict topics for test data
# unnormalized doc-topic distribution
X_test = tf_vectorizer.transform(test)
doc_topic_dist_unnormalized = np.matrix(lda.transform(X_test))
# normalize the distribution (only needed if you want to work with the probabilities)
doc_topic_dist = doc_topic_dist_unnormalized/doc_topic_dist_unnormalized.sum(axis=1)
要找到排名最高的主题,您可以执行以下操作:
doc_topic_dist.argmax(axis=1)
关于python - sklearn 潜在狄利克雷分配变换 v. Fittransform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40597075/