这篇文章主要是讲述如何通过LDA处理文本内容TXT,并计算其文档主题分布,主要是核心代码为主。其中LDA入门知识介绍参考这篇文章,包括安装及用法:
[python] LDA处理文档主题分布代码入门笔记
该文本内容原自博客:文本分析之TFIDF/LDA/Word2vec实践 ,推荐大家去阅读。
输出则是这十篇文档的主题分布,Shape(10L, 2L)表示10篇文档,2个主题。
具体结果如下所示:
同时调用 matplotlib.pyplot 输出了对应的文档主题分布图,可以看到主题Doc0、Doc1、Doc8分布于Topic0,它们主要描述主题新春;而Doc2、Doc3、Doc9分布于Topic1,主要描述股市。
其过程中也会输出描述LDA运行的信息,如下图所示:
运行结果如下图所示:共2个主题Topics,15个核心词汇。
绘图推荐文章:http://blog.youkuaiyun.com/pipisorry/article/details/37742423
PS:讲到这里,整个完整的LDA算法就算结束了,你可以通过上面的代码进行LDA主题分布的计算,下面是一些问题。
但是在将TF-IDF用于LDA算法model.fit(np.asarray(weight))时,总是报错如下:
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'
所以后来LDA我采用的是统计词频的方法进行的,该段代码如下:
输出如下所示:
得到weight权重后,然后调用对应的算法即可执行不用的应用,如:
import lda
model = lda.LDA(n_topics=20, n_iter=500, random_state=1)
model.fit(np.asarray(weight))
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=4) #景区 动物 人物 国家
s = clf.fit(weight)
通过word = vectorizer.get_feature_names()获取整个预料的词向量,其中TF-IDF对应的就是它的值。然后再获取其位置对应的关键词即可,代码中输出5个关键词,如下图所示:
讲到此处你也应该理解了LDA的基本用法和适用场景,你可以通过它进行新闻主题分布,同时再进行引文推荐、聚类算法等操作。
总之,希望这篇基础性的文章对你有所帮助吧!还是那句话:
虽然我写这类文章看起来很简单,尤其对于机器学习的大牛来说,感觉没什么实质内容;但是如果你刚接触这类知识,还是非常头疼的,想找到一个可运行的算法很困难。
这也是为什么总感觉以前学习了一些原理或理论的东西,而实际应用不是很明白,这种感觉就像学游泳,在岸上看别人感觉什么都会了,但想要学会还是得下水,一步一步来,而我写的这类基础文章就相当于带你下水吧!后面你才能做些自己喜欢的算法和研究。
最近真的很忙,同时我认识了一位很优秀的女生,总算迈出了人生最重要的一步,就是真正的勇敢的出去接触些异性朋友,这感觉非常不错的。同时学校工作那边仍然在等消息,真心想回家当一名软件相关的教师啊~
最后附上最近朋友圈的一条信息:
哎!感叹下时光吧,仅以此诗纪念这三年写博客的坚持和北理最后的四个月:
但行好事,莫问前程。
待随满天李桃,再追学友趣事。
(By:Eastmount 2016-03-15 深夜3点 http://blog.youkuaiyun.com/eastmount/ )
[python] LDA处理文档主题分布代码入门笔记
1.输入输出
输入是test.txt文件,它是使用Jieba分词之后的文本内容,通常每行代表一篇文档。该文本内容原自博客:文本分析之TFIDF/LDA/Word2vec实践 ,推荐大家去阅读。
输出则是这十篇文档的主题分布,Shape(10L, 2L)表示10篇文档,2个主题。
具体结果如下所示:
同时调用 matplotlib.pyplot 输出了对应的文档主题分布图,可以看到主题Doc0、Doc1、Doc8分布于Topic0,它们主要描述主题新春;而Doc2、Doc3、Doc9分布于Topic1,主要描述股市。
其过程中也会输出描述LDA运行的信息,如下图所示:
2.核心代码
其中核心代码如下图所示,包括读取文本、LDA运行、输出绘图等操作。
运行结果如下图所示:共2个主题Topics,15个核心词汇。
PS:讲到这里,整个完整的LDA算法就算结束了,你可以通过上面的代码进行LDA主题分布的计算,下面是一些问题。
3.TFIDF计算及词频TF计算
特征计算方法参考:Feature Extraction - scikit-learn
但是在将TF-IDF用于LDA算法model.fit(np.asarray(weight))时,总是报错如下:
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'
所以后来LDA我采用的是统计词频的方法进行的,该段代码如下:
输出如下所示:
得到weight权重后,然后调用对应的算法即可执行不用的应用,如:
import lda
model = lda.LDA(n_topics=20, n_iter=500, random_state=1)
model.fit(np.asarray(weight))
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=4) #景区 动物 人物 国家
s = clf.fit(weight)
4.百度互动主题分布例子
输入数据主要是前面讲述过的爬取百度百科、互动百科的景区、动物、人物、国家四类信息,具体如下所示:
输出如下所示,共12行数据,其中doc0~doc2主题分布为topic1,其主题表示景区;doc3~doc5主题分布为topic3,其主题表示动物;doc6~doc8主题分布为topic0,其主题表示人物;doc9~doc11主题分布为topic2,其主题表示国家。
5.计算主题TopN
主要是回复读者的问题,如何计算主题的TopN关键词。核心代码如下:
通过word = vectorizer.get_feature_names()获取整个预料的词向量,其中TF-IDF对应的就是它的值。然后再获取其位置对应的关键词即可,代码中输出5个关键词,如下图所示:
讲到此处你也应该理解了LDA的基本用法和适用场景,你可以通过它进行新闻主题分布,同时再进行引文推荐、聚类算法等操作。
总之,希望这篇基础性的文章对你有所帮助吧!还是那句话:
虽然我写这类文章看起来很简单,尤其对于机器学习的大牛来说,感觉没什么实质内容;但是如果你刚接触这类知识,还是非常头疼的,想找到一个可运行的算法很困难。
这也是为什么总感觉以前学习了一些原理或理论的东西,而实际应用不是很明白,这种感觉就像学游泳,在岸上看别人感觉什么都会了,但想要学会还是得下水,一步一步来,而我写的这类基础文章就相当于带你下水吧!后面你才能做些自己喜欢的算法和研究。
最近真的很忙,同时我认识了一位很优秀的女生,总算迈出了人生最重要的一步,就是真正的勇敢的出去接触些异性朋友,这感觉非常不错的。同时学校工作那边仍然在等消息,真心想回家当一名软件相关的教师啊~
最后附上最近朋友圈的一条信息:
哎!感叹下时光吧,仅以此诗纪念这三年写博客的坚持和北理最后的四个月:
但行好事,莫问前程。
待随满天李桃,再追学友趣事。
(By:Eastmount 2016-03-15 深夜3点 http://blog.youkuaiyun.com/eastmount/ )