2015-12-23 18 views
8

私はLDA(Latent Dirichlet Allocation)のトピックモデリングメソッドを使用して、一連のドキュメントからトピックを抽出します。私が下のリンクから理解していることから、これは抽出されたトピックで各文書を分類/ラベル付けするための教師なし学習アプローチです。そのリンクに与えられたサンプルコードでトピックモデリング - カテゴリ2のトピックを含むドキュメントをカテゴリラベルとして割り当てる - sklearn潜在ディリクレ割り当て

Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation

、識別されたトピックのそれぞれに関連付けられたトップの単語を取得するために定義された関数があります。

sklearn.__version__ 

アウト[41]: '0.17'

from sklearn.decomposition import LatentDirichletAllocation 


def print_top_words(model, feature_names, n_top_words): 
    for topic_idx, topic in enumerate(model.components_): 
     print("TopiC#%d:" % topic_idx) 
     print(" ".join([feature_names[i] 
         for i in topic.argsort()[:-n_top_words - 1:-1]])) 
    print() 

print("\nTopics in LDA model:") 
tf_feature_names = tf_vectorizer.get_feature_names() 
print_top_words(lda, tf_feature_names, n_top_words) 

私の質問はこれです。 ビルドモデルLDAのコンポーネントまたはマトリックスドキュメントトピックの関連を入手できますか?

たとえば、各文書に関連付けられている上位2トピックが、文書の文書ラベル/カテゴリとしてであることが必要です。トピック内の単語の分布を見つけるためのmodel.components_と同様に、文書内にトピックの分布を見つけるためのコンポーネントはありますか?

答えて

9

LDAクラスのtransform(X)関数を使用して、ドキュメントトピックの関連付けを計算できます。サンプルコードで

、これは次のようになります。LDAと

doc_topic_distrib = lda.transform(tf) 

フィットLDA、および入力データtfをあなたは

+0

感謝を変換したいです!魅力のように働いた – prashanth

+0

私はこの解決策で少し混乱しています。私は各文書に関連するトピックを示す出力を得ることを望んでいました。ドキュメント1:トピック:[1、2、3] – moku

+0

あなたが得るのは、各ドキュメントのトピックの配布です。したがって、各行はドキュメントに対応し、各列はトピックに対応します。あなたが望む結果を得るには、それぞれの行を見て、3つの最大値の列インデックスを取得します。これは、ドキュメントごとに3つの最も重要なトピックを提供します。 – clemgaut

関連する問題