Python之LDA主题模型算法应用

简介: Python之LDA主题模型算法应用

在这篇文章中,我将介绍用于Latent Dirichlet Allocation(LDA)的lda Python包的安装和基本用法。我不会在这篇文章中介绍该方法的理论基础。然而,这个模型的主要参考,Blei etal 2003可以在线免费获得,我认为将语料库(文档集)中的文档分配给基于单词矢量的潜在(隐藏)主题的主要思想是相当容易理解的而这个例子(来自lda)将有助于巩固我们对LDA模型的理解。那么,让我们开始......


安装lda

在之前的帖子中,我介绍了使用pipvirtualenwrapper安装Python包,请参阅帖子了解更多详细信息:

  • 在Ubuntu 14.04上安装Python包
  • 在Ubuntu 14.04上的virtualenv和virtualenvwrapper

简而言之,我将提到两种方法:

  • 方法1

我将以用户身份安装lda

1. $ pip install --user lda

这也将安装所需的pbr包。现在我将 在一个设置中提供lda,其中包含我之前安装的所有其他软件包(再次参见上文)。使用此方法,您应该在安装后得到类似的内容:

1. $ pip show lda
---

名称:lda

版本:0.3.2

位置:/home/cstrelioff/.local/lib/python2.7/site-packages

需要:pbr,numpy

我已经安装了numpy,因此没有修改。

所以,就是这样,lda已经安装好了。让我们一起完成随包提供的示例。


一个例子

lda github存储库中的示例查看路透社新闻发布的语料库 - 让我们复制一下并添加一些细节以更好地了解正在发生的事情。此要点提供了一个包含所有要遵循的代码的脚本,名为 ex002_lda.py。首先,我们做一些导入:

import numpy as np


import lda


import lda.datasets

接下来,我们导入用于示例的数据。这包含在 lda包中,因此这一步很简单(我还打印出每个项目的数据类型和大小):

从上面我们可以看到有395个新闻项目(文档)和一个大小为4258的词汇表。文档术语矩阵X具有395个词汇表中每个4258个词汇单词的出现次数。文档。例如,X [0,3117]是单词3117在文档0中出现的次数。我们可以找出计数和与之对应的单词(让我们也得到文档标题):

doc_id = 0


word_id = 3117


print (“doc id:{} word id:{}” 。format (doc_id , word_id ))


print (“ - count:{}” 。format (X [ doc_id , word_id ]))


print (“ - word:{}” 。format (vocab [ word_id ]))


print (“ - doc:{}” 。format (titles [ doc_id ]))


doc id :0 word id :3117


- count :2


- word :heir - to - the - throne

 当然我们应该期望X 矩阵中有很多零 - 我选择这个例子来获得非零结果。


选择模型

接下来,我们初始化并拟合LDA模型。要做到这一点,我们必须选择主题的数量(其他方法也可以尝试查找主题的数量,但对于LDA,我们必须假设一个数字)。继续我们选择的示例:

1. model = lda 。LDA (n_topics = 20 , n_iter = 500 , random_state = 1 )

先前有几个参数我们保留默认值。据我所知,这只使用对称先验 - 我将不得不更多地研究它(参见Wallach etal 2009讨论这个问题)。


主题字

从拟合模型中我们可以看到主题词概率:

从输出的大小我们可以看出,对于20个主题中的每一个,我们在词汇表中分配了4258个单词。对于每个主题,应该对单词的概率进行标准化。我们来看看前5:

for n in range (5 ):


sum_pr = sum (topic_word [ n ,:])


print (“topic:{} sum:{}” 。format (n , sum_pr ))
 

我们还可以获得每个主题的前5个单词(按概率):

 * 主题 6


- 德国 德国 战争 政治 政府


* 主题 7


- 哈里曼 你。小号 克林顿 丘吉尔 大使


* 主题 8


- 叶利钦 的俄罗斯 俄罗斯 总统 克里姆林宫


* 主题 9


- 王子 女王 鲍尔斯 教会 王


* 主题 10


- 辛普森 亿 年前 南


- bernardin 红衣主教 癌症 教会 生活


* 主题 17


- 死于 丧葬 教会 城市 死亡


* 主题 18


- 博物馆 肯尼迪 文化 城市 文化


* 主题 19


- 艺术 展 世纪 城市 之旅

这让我们了解了20个主题可能意味着什么?


文档主题

我们从模型中获得的其他信息是文档主题概率:


doc_topic = model .doc_topic_

查看输出的大小,我们可以看到395个文档中的每个文档都有20个主题的分布。这些应该针对每个文档进行标准化,让我们测试前5个:

for n in range (5 ):


sum_pr = sum (doc_topic [ n ,:])


print (“document:{} sum:{}” 。format (n , sum_pr ))

文件 0 总和 1.0

文件 1 总和 1.0

文件 2 总和 1.0

文件 3 总和 1.0

文件 4 总和 1.0

使用新故事的标题,我们可以对最可能的主题进行抽样:

for n in range (10 ):


topic_most_pr = doc_topic [ n ] 。argmax ()


print (“doc:{} topic:{} \ n {} ...” 。format (n ,


topic_most_pr ,


titles [ n ] [:50 ]))

可视化

让我们看看一些主题词分布是什么样的。这里的想法是每个主题应该有一个独特的单词分布。在下面的词干图中,每个词干的高度反映了焦点主题中单词的概率:

plt .tight_layout ()


plt .show ()

最后,让我们看一下几个文档的主题分布。这些分布给出了每个文档的20个主题中每个主题的概率。我只会画一些:

1. plt .tight_layout ()
plt .show ()

 

 

相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
143 55
|
20天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
26 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
21天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
112 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
3天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
41 20
|
1天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
33 5
|
1天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
22 0
|
2天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
103 80
|
21天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
7天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。