python主题建模可视化LDA和T-SNE交互式可视化
原文链接:http://tecdat.cn/?p=6917
我尝试使用Latent Dirichlet分配LDA来提取一些主题。 本教程以端到端的自然语言处理流程为特色,从原始数据开始,贯穿准备,建模,可视化论文。
我们将涉及以下几点
使用LDA进行主题建模
使用pyLDAvis可视化主题模型
使用t-SNE和散景可视化LDA结果
In [1]:
In [2]:
预处理和矢量化文档
In [3]:
In [4]:
计算双字母组/三元组:
正弦主题非常相似,可以区分它们是短语而不是单个/单个单词。
In [5]:
删除
In [6]:
修剪常见和罕见的单词,我们最终只有大约6%的单词。
矢量化数据:
第一步是获得每个文档的单词表示。
In [7]:
In [8]:
通过词袋语料库,我们可以继续从文档中学习我们的主题模型。
训练LDA模型
In [9]:
In [10]:
如何选择主题数量?
LDA是一种无监督的技术,这意味着我们在运行模型之前不知道在我们的语料库中有多少主题存在。 主题连贯性是用于确定主题数量的主要技术之一。
但是,我使用了LDA可视化工具pyLDAvis,尝试了几个主题并比较了结果。 四个似乎是最能分离主题的最佳主题数量。
In [11]:
In [12]:
Out[12]:
我们在这看到什么?
左侧面板,标记为Intertopic Distance Map,圆圈表示不同的主题以及它们之间的距离。类似的主题看起来更近,而不同的主题更远。图中主题圆的相对大小对应于语料库中主题的相对频率。
如何评估我们的模型?
将每个文档分成两部分,看看分配给它们的主题是否类似。 =>越相似越好
将随机选择的文档相互比较。 =>越不相似越好
In [13]:
Transform the data
In [14]:
In [15]:
让我们看一下每个主题中出现的术语。
In [17]:
In [18]:
从上面可以检查每个主题并为其分配一个人类可解释的标签。 在这里我将它们标记如下:
In [19]:
In [20]:
'''
# 1. Remove non-letters
paper_text = re.sub("[^a-zA-Z]"," ", paper)
# 2. Convert words to lower case and split them
words = paper_text.lower().split()
# 3. Remove stop words
words = [w for w in words if not w in stops]
# 4. Remove short words
words = [t for t in words if len(t) > 2]
# 5. lemmatizing
words = [nltk.stem.WordNetLemmatizer().lemmatize(t) for t in words]
In [21]:
In [22]:
In [23]:
In [24]:
In [25]:
In [26]:
In [27]:
BokehJS 0.12.5成功加载。
In [28]:
In [29]:
如果您有任何疑问,请在下面发表评论。
大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务
统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服)
【服务场景】
科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。
【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询
欢迎选修我们的R语言数据分析挖掘必知必会课程!
原文地址:https://www.cnblogs.com/tecdat/p/11543087.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《Flutter 小技巧》一行禁用App,一行置灰App,致敬
- 字符串:总结篇!
- 3 个助你玩转正则表达式的利器
- Flutter 实现虎牙/斗鱼 弹幕效果
- 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!
- 说一句最好的Flutter开源项目也不过分
- 超过百万的StackOverflow Flutter 问题
- Flutter 吐血整理组件继承关系图
- 单元测试框架怎么搭?新版的Junit5有哪些神奇之处?
- 开源179个Flutter组件的详细使用介绍
- 10 个你可能还不知道 VS Code 使用技巧
- Flutter 步骤进度组件
- 慌:一次订单号重复,差点被开除
- Flutter 分页功能表格控件
- 3分钟短文:Laravel 从软删除说到模型作用域的概念