本文主要是学习参考杨秀璋老师的博客,笔记总结与记忆。
原文链接
文章目录
书山有路勤为径,学海无涯苦作舟(行行代码要手敲)
零、吃水不忘挖井人
一、LDA主题模型
1.1简介
LDA(文档主题生成模型)通常由包含词、主题和文档三层结构组成。
LDA模型属于无监督学习,它是将一篇文档的每个词都以一定概率分布在某个主题上,并从这个主题中选择某个词语。
文档到主题的过程是服从多项分布的,主题到词的过程也是服从多项分布的。
文档主题生成模型(又称为盘子表示法(Plate Notation),下图是模型的标示图,其中双圆圈表示可测变量,单圆圈表示潜在变量,箭头表示两个变量之间的依赖关系,矩形框表示重复抽样,对应的重复次数在矩形框的右下角显示。LDA模型的具体实现步骤如下:
- 从每篇网页D对应的多项分布θ中抽取每个单词对应的一个主题z。
- 从主题z对应的多项分布φ中抽取一个单词w。
重复步骤(1)(2),共计Nd次,直至遍历网页中每一个单词。
1.2安装
二、LDA主题识别
Python的LDA主题模型分布可以进行多种操作,常见的包括:
- 输出每个数据集的高频词TOP-N
- 输出文章中每个词对应的权重及文章所属的主题
- 输出文章与主题的分布概率,文本一行表示一篇文章,概率表示文章属于该类主题的概率;
- 输出特征词与主题的分布概率,这是一个K*M的矩阵,K为设置分类的个数,M为所有文章词的总数。
2.1前期操作
2.1.1生成TF-IDF文本权重矩阵
先要对文本数据进行分词和数据的清洗操作,对清洗完的数据进行生成文本的权重矩阵。
#coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
#读取语料
corpus = []
for line in open('test.txt', 'r').readlines():
corpus.append(line.strip())
#将文本中的词语转换为词频矩阵
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus) #计算个词语出现的次数
word = vectorizer.get_feature_names() #获取词袋中所有文本关键词
#计算TF-IDF值
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(X) #将词频矩阵X统计成TF-IDF值
#查看数据结构 输出tf-idf权重
print(tfidf.toarray())
weight = tfidf.toarray()
2.1.2 调用LDA模型
model = lda.LDA(n_topics=3, n_iter=500, random_state=1)
model.fit(X)
#model.fit_transform(X)
参数n_topics表示设置3个主题,n_iter表示设置迭代次数500次,并调用fit(X)或fit_transform(X)函数填充训练数据.