用sklearn对LDA模型训练后的文本进行调优可视化的python代码并说清思路
调优和可视化LDA模型的过程可以分为以下几个步骤:
- 导入所需的库和数据
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import matplotlib.pyplot as plt
- 加载数据集,并进行文本向量化
data = fetch_20newsgroups()
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(data.data)
- 创建LDA模型并训练
lda_model = LatentDirichletAllocation(n_components=10, random_state=42)
lda_model.fit(X)
- 调优:找到最佳的主题数量
# 训练多个LDA模型,分别设置不同的主题数量
n_topics = [5, 10, 15, 20, 25, 30]
perplexities = []
for n in n_topics:
lda_model = LatentDirichletAllocation(n_components=n, random_state=42)
lda_model.fit(X)
perplexities.append(lda_model.perplexity(X))
# 绘制不同主题数量下的perplexity曲线
plt.plot(n_topics, perplexities)
plt.xlabel('Number of Topics')
plt.ylabel('Perplexity')
plt.title('LDA Model Perplexity')
plt.show()
- 可视化:绘制主题词分布
# 获取主题-词分布矩阵
topic_word_distribution = lda_model.components_
# 绘制每个主题下的前10个关键词
n_top_words = 10
feature_names = vectorizer.get_feature_names_out()
for topic_idx, topic in enumerate(topic_word_distribution):
top_features_ind = topic.argsort()[:-n_top_words - 1:-1]
top_features = [feature_names[i] for i in top_features_ind]
print(f"Topic #{topic_idx}:")
print(top_features)
print()
上述代码中,首先加载了所需的库和数据集。然后使用CountVectorizer进行文本向量化,将文本转化为词频向量表示。接下来创建LDA模型并训练,可以根据需要设置不同的主题数量。通过计算perplexity选择最佳的主题数量。最后,通过获取主题-词分布矩阵,绘制每个主题下的关键词分布,以便进行可视化展示
原文地址: http://www.cveoy.top/t/topic/iCd4 著作权归作者所有。请勿转载和采集!