主题建模-corpora语料库-PCA进行降维

news/2024/5/20 7:28:34 标签: python, 聚类, 机器学习

https://colab.research.google.com/drive/1F-1Ej7T2xnUKXSmDPjjOChNbBTvQlpnM?usp=sharing

考试

https://colab.research.google.com/drive/1hSRxzFL9cx7PYrHYZeEnT3jRSn8LmQcx?usp=sharing

第一题要求

  1. 聚类选定的新闻数据。此时,请考虑以下事项。(2分:每项0.5分)
  • 创建并应用您自己的停用词处理列表。(0.5 分)
  • 执行内聚聚类时,请使用 Ward 技术以外的技术。(0.5 分)
  • 使用轮廓分数来确定理想的簇数。(0.5 分)
  • 使用散点图可视化聚类结果。(PCA 或 TSNE)(0.5 分)

你今天会学到什么

1.文档聚类

2.主题建模

2.主题建模

主题建模是使用表示文档中潜在主题的词。

它是一种自然语言处理技术,可以自动选择和呈现文档中的文档。

给定大量文档,很难找出这些文档涵盖的主题。

这是一个有用的技能。

但是,需要一个人在分析时判断目标文档分为多少个主题

另外,主题模型呈现的主题并没有作为完美主题提供,

由于它是从文档中提取的关键词,因此主题的解释留给了人类。

主题建模基于长文档而不是短文档(句子),例如推文或评论。

他们往往会给出有意义的结果。

主题模型也对应词袋型,因为它不考虑词的顺序。

在刚刚学习的聚类中,一个文档被归为一个簇。

在主题建模中,一个文档可以有多个主题。

在这种实践中,各种主题建模技术之一

让我们看看一种称为Latent Dirichlet Allocation (LDA)的技术

为此,使用了一个名为gensim的主题建模 Python 库,

为了可视化结果,我们将使用一个名为pyLDAvis的库。

  • gensim:用于构建主题模型的 Python 库
models.ldamodel – Latent Dirichlet Allocation — gensim
  • pyLDAvis:用于可视化主题模型结果的 Python 库
Welcome to pyLDAvis’s documentation! — pyLDAvis 2.1.2 documentation

在主题建模实践中,对200篇经济文章进行韩文预处理后,

让我们创建一个主题模型并可视化结果是什么。

您还将学习如何确定主题的数量。

代码解析

import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings("ignore", category=DeprecationWarning)

import glob
news_file = []
for file in glob.glob('/content/econ_news/*NewsData.txt'):
# print(file)
news_file.append(file)
news_file.sort()
news_file

from konlpy.tag import Okt
okt = Okt()
stopwords = ['가가', '가지', '각각', '거나', '게다가', '경우', '관련', '그동안', '기자', '다른',
'다만', '다시', '다음', '당시', '대상', '대신', '대해', '더욱', '따라서', '때문',
'또한', '라며', '로부터', '로서', '만약', '만큼', '면서', '모두', '모든', '반면',
'별로', '사이', '생각', '앞서', '앵커', '얘기', '여기', '여부', '우리', '위해',
'이란', '이번', '이후', '일부', '작년', '정도', '지금', '지난', '지난달', '지난해',
'최근', '통해', '현재']
news_raw_texts = [] # 뉴스 기시 본문을 담는 리스트
news_nouns = [] # 명사 리스트 획득
news_data = [] # tfidf.vectorizer에 입력할 데이터
for file in news_file:
with open(file, 'r') as f:
news_text = f.read()
news_raw_texts.append(news_text)
noun_list = okt.nouns(news_text)
cleaned_nouns = [n for n in noun_list if (len(n) > 1) and (n not in stopwords)] # 한 글자로 된 명사를 제거 & stopwords 제거
news_data.append(' '.join(cleaned_nouns))
news_nouns.append(cleaned_nouns)
len(news_nouns)

import glob

news_file = [] # 存储经济新闻文本文件名的列表
for file in glob.glob('/content/econ_news/*NewsData.txt'): # 获取所有以 "NewsData.txt"结尾的文件的文件名
news_file.append(file)

#---

from konlpy.tag import Okt

okt = Okt() # 初始化Konlpy的Okt分词器

# 设置需要去除的停用词
stopwords = ['가가', '가지', '각각', '거나', '게다가', '경우', '관련', '그동안', '기자', '다른',
'다만', '다시', '다음', '당시', '대상', '대신', '대해', '더욱', '따라서', '때문',
'또한', '라며', '로부터', '로서', '만약', '만큼', '면서', '모두', '모든', '반면',
'별로', '사이', '생각', '앞서', '앵커', '얘기', '여기', '여부', '우리', '위해',
'이란', '이번', '이후', '일부', '작년', '정도', '지금', '지난', '지난달', '지난해',
'최근', '통해', '현재']

news_raw_texts = [] # 存储新闻文本的列表
news_nouns = [] # 存储新闻文本中提取出的名词的列表
news_data = [] # 存储将新闻文本中提取出的名词转化为字符串的列表,以便传递给tfidf.vectorizer

# 遍历每一个新闻文件
for file in news_file:
with open(file, 'r') as f:
news_text = f.read() # 读取新闻文本
news_raw_texts.append(news_text) # 将新闻文本存入news_raw_texts列表中
noun_list = okt.nouns(news_text) # 使用Okt分词器对新闻文本进行分词,并只保留名词
cleaned_nouns = [n for n in noun_list if (len(n) > 1) and (n not in stopwords)] # 去除长度为1的名词和停用词
news_data.append(' '.join(cleaned_nouns)) # 将处理后的名词列表转化为以空格分隔的字符串,以便传递给tfidf.vectorizer
news_nouns.append(cleaned_nouns) # 将处理后的名词列表存入news_nouns列表中

#---

corpora语料库




from gensim import corpora
dictionary = corpora.Dictionary(news_nouns) # 使用gensim库的corpora模块创建一个词典
corpus = [dictionary.doc2bow(text) for text in news_nouns] #
这段代码的作用是使用gensim库的corpora模块将文档中的名词列表news_nouns转换为字典dictionary,然后使用该字典 将语料库corpus创建出来
在这里,corpus是一个包含每个文档的 单词索引和词频信息的列表的列表。例如,corpus[1]是一个包含第二篇新闻单词索引和词频信息的列表。
因此,print(corpus[1])的代码输出了第二篇新闻的索引和词频信息。在Python中,索引从0开始,因此第一篇文档的索引是0。

PCA进行降维

以下是使用散点图可视化聚类结果的示例代码,其中使用了PCA进行降维:

import matplotlib.pyplot as plt

from sklearn.decomposition import PCA

# 假设有聚类结果的数据集或特征集

cluster_data = ...

# 使用PCA进行降维

pca = PCA(n_components=2)

reduced_features = pca.fit_transform(cluster_data)

# 假设每个数据点对应的聚类标签为labels

labels = ...

# 绘制散点图

plt.scatter(reduced_features[:, 0], reduced_features[:, 1], c=labels)

plt.xlabel("Component 1")

plt.ylabel("Component 2")

plt.title("Clustering Results")

plt.show()

在这段代码中,首先导入matplotlib.pyplotsklearn.decomposition.PCA。然后,假设有一个聚类结果的数据集或特征集存储在cluster_data中。接下来,使用PCA进行降维,将数据集降低到2维。通过创建PCA对象并调用fit_transform方法,将cluster_data转换为降维后的特征矩阵reduced_features

假设每个数据点对应的聚类标签存储在labels中。最后,使用plt.scatter绘制散点图,将降维后的特征矩阵的第一维和第二维作为横纵坐标,通过指定c参数为labels,将不同聚类标签的数据点着色。

请注意,在使用此代码之前,需要根据实际情况提供合适的数据集或特征集,并根据需要选择PCA或TSNE进行降维。

可用于分析舆情主题,自然语言处理,非常高级

 


http://www.niftyadmin.cn/n/331062.html

相关文章

目标检测创新:一种基于区域的半监督方法,部分标签即可(附原论文下载)...

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2201.04620v1.pdf 计算机视觉研究院专栏 作者:Edison_G 研究表明,当训练数据缺少…

MyBatis中的9种常用动态sql标签精妙用法

1、用来循环容器的标签forEach foreach元素的属性主要有item,index,collection,open,separator,close。 item:集合中元素迭代时的别名,index:集合中元素迭代时的索引open&#xff1a…

Python爬虫| 一文掌握XPath

本文概要 本篇文章主要介绍利用Python爬虫爬取付费文章,适合练习爬虫基础同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! 🌟🌟🌟个人简介🌟&…

【腾讯云 Finops Crane 集训营】基于 Kubernetes 实现云资源分析与成本优化平台

基于 Kubernetes 实现云资源分析与成本优化平台 一、基本介绍1.主要功能2.整体架构 二、基于 Kubernetes 实现云资源分析与成本优化平台1.准备工作2.安装 Prometheus/Grafana 软件包3.安装 Crane 软件包4. 使用智能弹性 EffectiveHPA4.配置集群 三、功能验证1.成本展示2.资源推…

【C++从0到王者】第三站:类和对象(中)赋值运算符重载

文章目录 一、运算符重载1.运算符重载的使用2.运算符重载的注意事项 二、赋值运算符重载1.复制拷贝与拷贝构造2.赋值运算符重载的格式3.赋值运算符重载的实现4.赋值运算符重载的注意事项 一、运算符重载 1.运算符重载的使用 当我们实现一个日期类的时候,我们有时候…

SSH远程终端神器,你在用哪一款

唠嗑部分 在我们日常开发中啊,不可避免的要与Linux打交道,虽然我们作为开发,不要求我们对Linux有多么的专业,但是基本的操作还是要会的,举几个常用的例子: 1、查看nginx配置,配置转发 2、清理…

微信小程序配置实现中英文国际化语言切换

目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态(默认设置为中文) 3. 页面添加 语言切换按钮(登录页面) 4. 在需要显示的页面导入使用 1,在根目录新建文件夹和js文件 根目录新建一个locales.js文件, 通用…

第四十三天学习记录:工作相关,更新软件当数据库需要改动时的部分操作

因为欠缺对数据库这一部分的系统学习,导致目前在更新软件涉及到变更数据库时,都要让售后工程师重置软件,以前的数据库数据若想保留极其不方便。虽然数据库也被列为我自学课程列表内,但眼下C语言都还没学习完成。因此,只…