文本聚类与分类

2023-10-31

引入库

首先导入本项目所需的所有模块。

from LAC import LAC
import warnings
warnings.filterwarnings('ignore')
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

以下是本篇文章正文内容。

一、数据预处理

1.加载数据

首先将文本数据和标签数据导入。

#文本数据
f = open('x1.txt','r',encoding='utf-8') 
text_list = f.readlines() 

#标签数据
labels = []
for line in open('y1.txt', 'r',encoding='utf-8'):  #打开文件
    rs = line.rstrip('\n')  # 移除行尾换行符
    labels.append(rs)

labels中标签的解释:

体育 0
娱乐 1
家具 2
彩票 3
房产 4
教育 5
时尚 6
时政 7
星座 8
游戏 9
社会 10
科技 11
股票 12
财经 13

2.加载停用词

本文使用百度所提供的停用词表来去除停用词。

stopword_path = "百度停用词表.txt"
with open(stopword_path, 'r', encoding='utf-8') as f:
     stop_words= [line.strip() for line in f]

3.分词

考虑中文方面分词jieba的效果不如国内企业百度,因此使用百度的LAC模块进行分词,下载LAC这个库,直接pip install lac即可。

lac = LAC(mode='lac')
corpus = []
 
for text in text_list :
    line = text.strip()
    lac_result = lac.run(line)
    corpus.append(' '.join(lac_result[0]))

结果上述步骤之后就完成了数据预处理,下面将处理好之后的文本数据进行转换。

处理后的文本数据

二、数据转换(tf-idf词袋模型)

2.1 文本转换成词袋模型(词频作为统计指标)

countVectorizer = CountVectorizer(stop_words=stop_words,analyzer="word")
count_v = countVectorizer.fit_transform(corpus)
# 词袋中的词语
print(countVectorizer.get_feature_names_out())
# 词频向量
print(count_v.toarray())

2.2 词频统计指标转换 tf-idf统计指标

tfidfTransformer = TfidfTransformer()
tfidf = tfidfTransformer.fit_transform(count_v)
print(tfidf.toarray())
tfidf = tfidf.toarray()

2.3 对词频向量进行降维(PCA)

由于下面将使用DBSCAN算法进行聚类,考虑DBSCAN算法对数据维度敏感,不适合高纬度的数据,因此采用PCA算法对数据进行降维,将数据维度压缩到二维。

pca = PCA(n_components=2)
pca_weights = pca.fit_transform(tfidf)
print(pca_weights)

三、文本聚类(DBSCAN)

DBSCAN是比较著名的基于密度的聚类方法,它可以轻松地得到各种形状的簇。
主要有两个参数,邻域半径 ϵ 以及邻域内最少数据点数 minpts.

from sklearn.cluster import DBSCAN
clf = DBSCAN(eps=0.16, min_samples=10)
y = clf.fit_predict(tfidf)
# 每个文本对应的簇的编号 (-1 在dbscan中属于噪音簇,里面都是噪音点)
print(y)

四、sklearn调用knn和svm进行分类.

划分训练集与测试集:

X_train = tfidf[:int(len(tfidf)*0.7)]
X_test = tfidf[int(len(tfidf)*0.7):]
y_train = labels[:int(len(tfidf)*0.7)]
y_test = labels[int(len(tfidf)*0.7):]

4.1 KNN

KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。那么最近的邻居又是怎么回事呢?其实啊,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import Pipeline

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

print('KNN分类准确率为:',knn.score(X_test, y_test))

KNN分类准确率为:0.81467

4.2 SVM

支持向量机 (SVM) 是一个非常经典且高效的分类模型。尽管现在深度学习十分流行, 了解支持向量机的原理,对想法的形式化,简化, 及一步步使模型更一般化的过程, 及其具体实现仍然有其研究价值。另一方面,支持向量机仍有其一席之地。相比深度神经网络, 支持向量机特别擅长于特征维数多于样本数的情况,而小样本学习至今仍是深度学习的一大难题。

import numpy as np
from sklearn import svm
from sklearn.metrics import accuracy_score

clf = svm.SVC(kernel='precomputed')
gram_train = np.dot(X_train, X_train.T)
clf.fit(gram_train, y_train)
gram_test = np.dot(X_test, X_train.T)
y_pred = clf.predict(gram_test)
print('SVM分类准确率为:',accuracy_score(y_test,y_pred))

SVM分类准确率为0.86467。可见SVM对于该文本的分类效果更好。

五、分类和聚类的模型解释

文本聚类和文本分类最大的不同是一个是监督是学习,一个是非监督式学习。

文本分类:事先给定分类体系和训练样例(标注好类别信息的文本),将文本分到某个或者某几个类别中。可用于新闻栏目分类、垃圾过滤和推荐系统等。

文本聚类:在文本方向上的应用,首先要把一个个文档的自然语言转换成数学信息,这样形成高维空间点之后再去计算点与点之间的距离,然后将这些距离比较近的聚成一个簇,这些簇的中心成为簇心。而我们做的就是保证簇内点的距离足够近,簇与簇的距离足够远。可用于检索结果的聚类显示和提高检索结果等功能。


参考文献:https://blog.csdn.net/lllhhhv/article/details/124267371

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本聚类与分类 的相关文章

随机推荐

  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 跟着我学 AI丨ChatGPT 详解

    随着人工智能的发展 聊天机器人成为了一个备受关注的领域 而ChatGPT作为其中的佼佼者 其功能和技术水平也越来越受到人们的关注 那么 什么是ChatGPT 它又有哪些优点和限制呢 ChatGPT是一款基于自然语言处理技术开发的聊天机器人
  • 2022年的有关语义分割的论文,含CVPR、ECCV、ICLR、AAAI

    TransRAC Encoding Multi scale Temporal Correlation with Transformers for Repetitive Action Counting CVPR 2022 Oral 论文 ht
  • 定时器的一些使用

    TIM TimeBaseStructure TIM Period 5000 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM TimeBaseStructure TIM Prescaler 7200
  • 输入一个二进制表示的正整数,转换成十进制输出

    我们想一想咋实现这个算法 input 输入一个二进制字符串 不能是其他类型的字符 只能为0和1 所以在这里要做出限制 略去非0和1的字符后 把二进制字符串逐个输入进行计算 二进制转化为十进制方法为 例子 110 0 2 1 2 2 1 2
  • 基于RFID技术在服装智慧门店中的应用-rfid服装盘点

    一 项目背景 相较于RFID服装智慧门店应用 传统的服装门店 普遍存在以下管理瓶颈 1 条码管理 费时费力 条码作为智能化的方式 虽然其智能化程度比以前大大提高 但仍需要耗费大量人力物力 2 服装查找耗时长 对顾客特殊要求的服装 在门店成千
  • 你所了解的Vim是什么样的,如何打造一款高级的Vim编辑器

    vim简介 vim是linux上一个比较实用的文本编辑器 它在代码补全 编译及错误跳转等方便编程的功能上特别丰富 在程序员中被广泛使用 vim安装 如果你还没有安装vim可以使用下面命令安装 ubuntu环境安装 如果是centosd的话使
  • Spring IoC实现及原理

    文章目录 一 IoC 1 Spring Ioc 的由来 2 IoC思想 3 IoC的实现 3 1 实现原理 3 2 实现过程 3 2 1 xml方式 3 2 2 注解方式 二 DI 1 DI含义 2 注入依赖的方式 2 1 构造方法注入 2
  • Lyapunov稳定性判定总结及PI滑膜悬架仿真

    目录 前言 1 PD PSD ND NSD概念 2 Stable asymptotic stability Globalasymptotic stability 3 线性定常系统的稳定性分析 4 滑模变结构的拉塞尔 Lasalle 不变性原
  • java语言数据库课程设计_数据库课程设计 人事管理系统 (一)

    一 JAVA与数据库的合作此次开发语言为Java 所用的数据库驱动是mysql connector java 5 1 8 bin jar第一步 用Java连接MySQL数据库 驱动下载 https dev mysql com downloa
  • python爬虫爬取-前程无忧-岗位信息

    用python获取前程无忧网站的岗位信息 通过前程无忧的一个信息接口来获取搜索的相关的岗位信息 先看效果 打开前程无忧网站 打开开发者模式 进行抓包 先刷新一遍 然后直接全局搜索关键字 找到这个文件 这些就是岗位信息 直接访问这个接口 就可
  • 最全解决方案:提示Flutter plugin not installed,实际已安装插件

    flutter提示AndroidStudio4 1没有安装flutter插件 实际已经安装 错误体现 错误原因 解决方案 错误体现 具体表现为 android studio 4 1已经安装了flutter和dart插件 但是flutter
  • mybatis初步运用

    为了和数据库进行交互 通常的做法是将SQL语句写在Java代码中 SQL语句和Java代码耦合在一起不利于后期维护修改 而MyBatis能够帮助我们将SQL语句和Java代码分离 方便了后期因需求变动而对SQL语句进行修改 下面举个例子说明
  • C++ Primer Plus 第六章 习题

    目录 复习题 1 请看下面两个计算空格和换行符数目的代码片段 2 在程序清单6 2中 用ch 1替换 ch将发生什么情况 3 请认真考虑下面的程序 4 创建表示下述条件的逻辑表达式 a weight大于或等于115 但小于125 b ch为
  • 浅谈深度学习归一化加快模型收敛速度

    在训练模型时 我们经常会对数据进行归一化 甚至在隐藏层中也加入归一化 这样做的主要目的是为了加快模型收敛速度 假设特征在经过卷积层后没有经过归一化的数据如下图分布 xx表示数据点 用sigmoid函数作为激活函数 那么在不经过归一化的时候数
  • 【ANSYS命令流】加载与求解技术(五):面载荷(单元、线、面、转换)的施加

    目录 面载荷的施加 单元荷载 在单元上施加面荷载 举个栗子 再举个栗子 在梁单元施加面荷载 在线上施加面荷载 举个栗子 在面上施加面荷载值 面荷载梯度及其加载 举个栗子 再举个栗子 表面效应单元施加面荷载 参考文献 面载荷的施加 ANSYS
  • JS对象数组根据某一相同项合并其他属性为一个数组

    现有数组 var array name 张飞 value 1 name 张飞 value 2 name 张飞 value 3 name 关羽 value 9 name 关羽 value 6 name 刘备 value 8 name 刘备 v
  • AI实战营第二期 第六节 《MMDetection代码课》——笔记7

    文章目录 什么是MMDetection 环境检测和安装 1 数据集准备和可视化 2 自定义配置文件 3 训练前可视化验证 4 模型训练 5 模型测试和推理 6 可视化分析 MMYOLO 环境和依赖安装 特征图可视化 1 可视化 backbo
  • MySQL Workbench如何使用和下载

    还在用 Navicat 的 可以试试这几款免费且好用的 MySQL 客户端 https zhuanlan zhihu com p 157887406 MySQL Workbench https www mysql com products
  • 文本聚类与分类

    TOC 引入库 一 数据预处理 1 加载数据 2 加载停用词 3 分词 二 数据转换 tf idf词袋模型 2 1 文本转换成词袋模型 词频作为统计指标 2 2 词频统计指标转换 tf idf统计指标 2 3 对词频向量进行降维 PCA 三