3
私はそれを見つけることができないかもしれないし、おそらく私の統計やその用語に関する知識はここの問題ですが、私はLDA lib from PyPIの下のページにあるグラフに似た何かを達成したいと思いますし、ラインの一貫性/ 。 Gensim LDAでこれを達成するにはどうすればよいですか?Gensim LDAモデルの収束を監視する方法は?
私はそれを見つけることができないかもしれないし、おそらく私の統計やその用語に関する知識はここの問題ですが、私はLDA lib from PyPIの下のページにあるグラフに似た何かを達成したいと思いますし、ラインの一貫性/ 。 Gensim LDAでこれを達成するにはどうすればよいですか?Gensim LDAモデルの収束を監視する方法は?
モデルフィッティングの収束をプロットしたいとお考えください。 残念ながら、Gensimはこれを非常に単純なものにしていないようです。
モデルフィッティング関数の出力を分析できるようにモデルを実行します。私はログファイルをセットアップするのが好きです。
import logging
logging.basicConfig(filename='gensim.log',
format="%(asctime)s:%(levelname)s:%(message)s",
level=logging.INFO)
LdaModel
でeval_every
パラメータを設定します。この値が低いほど、プロットの分解能が向上します。しかし、混乱を計算することは、あなたのフィット感を大きく低下させる可能性があります!
lda_model =
LdaModel(corpus=corpus,
id2word=id2word,
num_topics=30,
eval_every=10,
pass=40,
iterations=5000)
ログファイルを解析してプロットします。
import re
import matplotlib.pyplot as plt
p = re.compile("(-*\d+\.\d+) per-word .* (\d+\.\d+) perplexity")
matches = [p.findall(l) for l in open('gensim.log')]
matches = [m for m in matches if len(m) > 0]
tuples = [t[0] for t in matches]
perplexity = [float(t[1]) for t in tuples]
liklihood = [float(t[0]) for t in tuples]
iter = list(range(0,len(tuples)*10,10))
plt.plot(iter,liklihood,c="black")
plt.ylabel("log liklihood")
plt.xlabel("iteration")
plt.title("Topic Model Convergence")
plt.grid()
plt.savefig("convergence_liklihood.pdf")
plt.close()