2016-11-14 16 views
4

私はsklearnのNMFおよびLDAサブモジュールを使用して、ラベルのないテキストを分析しています。私はドキュメントを読んだが、これらのモジュール(NMFとLDA)の変換関数がRのtopicmodels(Predicting LDA topics for new dataを参照してください)の事後関数と同じであるかどうかはわかりません。基本的には、トレーニングセットのデータを訓練したモデルを使用してテストセットのトピックを予測できるような機能を探しています。私はデータセット全体について話題を予測しました。次に、データを列車と試験セットに分割し、列車セットのモデルを訓練し、そのモデルを使用してテストセットを変換しました。 2つの実行トピックを比較すると、変換関数がRのパッケージと同じ機能を果たすことは保証されません。私はあなたの反応に感謝します。 python - sklearn潜在的ディリクレ割り当て変換対フィッツトランスフォーム

あなたは

+0

あなたはscikit-学ぶどのバージョンを使用していますか? –

+0

また、結果が異なることを示したのは何ですか? –

+0

Mikhail、ありがとう、0.18。私の目標は、変換関数がテストセット内のトピックを予測する機能を提供するかどうかを理解することです。ありがとう – valearner

答えて

6

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) 
+0

私は考えていたRyan、NMFモデル、LDAは少なくともldaモジュール(Sklearnではない)が2つの行列WとHを生成すると信じてくれてありがとうございます。最初にX_test = tf_vectorizer .transform(test)を実行してからX_test * HT? – valearner

関連する問題