我使用sklearn的NMF和LDA子模块来分析未标记的文本。我阅读了文档,但我不确定这些模块(NMF和LDA)中的变换函数是否与R的topicmodels中的后验函数相同(请参阅预测LDA主题获取新数据)。基本上,我正在寻找一个函数,它将允许我使用在训练集数据上训练的模型来预测测试集中的主题。我预测了整个数据集的主题。然后我将数据分成训练集和测试集,在训练集上训练一个模型,并使用该模型转换测试集。虽然预计我不会得到相同的结果,但比较两个运行主题并不能向我保证转换函数的功能与R的包相同。感谢您的回复。
谢谢
对LatentDirichletAllocation
模型上的transform
的调用返回一个非规范化文档主题分布。为了获得适当的概率,您可以简单地将结果规范化。下面是一个例子:
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)