对当前路径下文件名为data_perplexityxlsx的excel类型的已经进行分词后的数据集 lda模型设置最大主题数为16绘制主题数与困惑度曲线、主题与一致性曲线的代码
以下是Python代码示例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from gensim.models import LdaMulticore
from gensim.corpora import Dictionary
from gensim.models import CoherenceModel
# 加载数据集
data = pd.read_excel('data_perplexity.xlsx')
texts = data['text'].apply(lambda x: x.split())
# 构建词典
dictionary = Dictionary(texts)
# 构建文档-词频矩阵
corpus = [dictionary.doc2bow(text) for text in texts]
# 定义主题数范围
min_topics = 2
max_topics = 16
step_size = 1
# 初始化列表,用于存储每个主题数对应的困惑度和一致性值
perplexity_values = []
coherence_values = []
# 遍历主题数范围,训练LDA模型,计算困惑度和一致性值
for num_topics in range(min_topics, max_topics+1, step_size):
lda_model = LdaMulticore(corpus=corpus, num_topics=num_topics, id2word=dictionary, workers=3, passes=10, iterations=50)
perplexity_values.append(lda_model.log_perplexity(corpus))
coherence_model_lda = CoherenceModel(model=lda_model, texts=texts, dictionary=dictionary, coherence='c_v')
coherence_values.append(coherence_model_lda.get_coherence())
# 绘制主题数与困惑度曲线
x = range(min_topics, max_topics+1, step_size)
plt.plot(x, perplexity_values)
plt.xlabel("Number of Topics")
plt.ylabel("Perplexity Score")
plt.title("Topic Model Perplexity")
plt.show()
# 绘制主题数与一致性曲线
plt.plot(x, coherence_values)
plt.xlabel("Number of Topics")
plt.ylabel("Coherence Score")
plt.title("Topic Model Coherence")
plt.show()
解释一下代码:
- 首先导入必要的库:Pandas用于读取Excel文件,numpy和matplotlib用于数据处理和可视化,gensim用于训练LDA模型和计算一致性指标。
- 加载数据集,并将每个文档转换为由单词组成的列表。
- 通过gensim的Dictionary类,构建词典。
- 将每个文档转换为基于词频的向量,即文档-词频矩阵。
- 定义主题数范围,并初始化两个空列表,用于存储困惑度和一致性值。
- 遍历主题数范围,训练LDA模型,并计算每个模型的困惑度和一致性值。
- 分别绘制主题数与困惑度曲线和主题数与一致性曲线。
原文地址: http://www.cveoy.top/t/topic/bw6X 著作权归作者所有。请勿转载和采集!