基于困惑度确定LDA的主题数量

本文介绍了如何使用Python的gensim库进行LatentDirichletAllocation(LDA)主题模型的构建,包括数据预处理、词袋模型创建、LDA模型训练,并展示了如何通过改变主题数量来分析困惑度的变化情况。
摘要由CSDN通过智能技术生成
import codecs
import gensim
from gensim import corpora, models
import matplotlib.pyplot as plt
import matplotlib
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer

fp = codecs.open(r"F:\LDA analysis\cleaned_text.txt", 'r', encoding='UTF-8')
data = fp.read()
fp.close()

# 以下几行将train列表的每个元素都生成一个列表 形成列表嵌套
train0 = data.split(" ")
train = []
for i in range(len(train0)):
    train1 = []
    train1.append(train0[i])
    train.append(train1)

dictionary = corpora.Dictionary(train)  # 构建 document-term matrix
corpus = [dictionary.doc2bow(text) for text in train]
Lda = gensim.models.ldamodel.LdaModel

def perplexity(num_topics):
    ldamodel = Lda(corpus, num_topics=num_topics, id2word=dictionary, passes=20)  # passes为迭代次数,次数越多越精准
    print(ldamodel.print_topics(num_topics=num_topics, num_words=5))  # num_words为每个主题下的词语数量
    print(ldamodel.log_perplexity(corpus))
    return ldamodel.log_perplexity(corpus)
# 绘制困惑度折线图
x = range(3,9)  #主题范围数量
y = [perplexity(i) for i in x]
plt.plot(x, y)
plt.xlabel('主题数目')
plt.ylabel('困惑度大小')
plt.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
plt.title('主题-困惑度变化情况')
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值