【机器学习】文本多分类

这篇具有很好参考价值的文章主要介绍了【机器学习】文本多分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:这只是浅显的一个小试验,且借助了AI。使用的是jupyter notebook,所以代码是一块一块,从上往下执行的

知识点:正则删除除数字和字母外的所有字符、高频词云、混淆矩阵

参考:使用python和sklearn的中文文本多分类实战开发_文本多标签分类 用二分类器做 python 数据集中文_-派神-的博客-CSDN博客


数据:【免费】初步的文本多分类小实验资源-CSDN文库

数据介绍:训练集train.csv中有120000条数据,测试集test.csv中有7600条数据。两个文件中记录的是新闻,均只有3列,第1列记录了新闻的种类(world,sports,sci/Tech,Business,记录与class.txt中),总共有4类[3,4,2,1],且每一类的占比均为25%;第2列记录了新闻标题,第3列记录了新闻的大致内容。

数据总体情况

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re # 正则匹配
plt.rcParams['font.sans-serif'] = ['STKaiTi']
plt.rcParams['axes.unicode_minus']=False

# 数据的情况
dfTrain = pd.read_csv('train.csv',header = None)
dfTest = pd.read_csv('test.csv',header = None)
print(f'训练集数据量:{len(dfTrain)}')
print(f'测试集数据量:{len(dfTest)}')
print(f'数据:{dfTrain.head(4)}')

【机器学习】文本多分类,机器学习,人工智能

数据预处理

空值与重复值

没有空值与重复值

# 检查是否有空值
print(f'数据情况{dfTrain.info()}')
print(f'第1列空值:{dfTrain.iloc[0].isnull().sum()}')
print(f'第2列空值:{dfTrain.iloc[1].isnull().sum()}')
print(f'第3列空值:{dfTrain.iloc[2].isnull().sum()}')
# 重复值分析与处理
print(f'重复值:{dfTrain.duplicated(keep=False).sum()}')

【机器学习】文本多分类,机器学习,人工智能

重命名列名

由于数据中没有列名,所以,读取的时候header=None(见第一段pd.read_csv),为了操作的方便,添加列名['category','title','content']。

# 列重命名
dfTrain.columns = ['category','title','content']
dfTest.columns = ['category','title','content']

删除除数字和英文的所有字符

为了展示出高频词的词云以及后续的处理,这里使用正则表达式删除数据中第2、3列中除数字和字母外的所有字符,且各词汇之间采用空格切分。

# 在a-z A-Z 0-9范围外的字符替换为空格字符
def remove_punctuation(text):
    cleaned_text = re.sub(r'[^a-zA-Z0-9]', ' ', text)
    return cleaned_text
# 删除除数字和英文的所有字符
dfTrain['title'] = dfTrain['title'].apply(remove_punctuation)
dfTest['title'] = dfTest['title'].apply(remove_punctuation)
dfTrain['content'] = dfTrain['content'].apply(remove_punctuation)
dfTest['content'] = dfTest['content'].apply(remove_punctuation)

补充

我这个试验只采用了第2列title的内容,没有用第3列content 里的内容,预测精度会有所下降。

这里呢其实还是可以有其他操作的。比如将第2列和第3列合并成新的一列,然后用新的一列作为输入。还可以删除英文里面的停用词,减少无意义的高频词。

不同分类对数据进行可视化

# 训练集种类
print(f'种类:{dfTrain.iloc[:,0].unique()}')
# 训练集各类别数据量
d= {'类别':dfTrain['category'].value_counts().index,'数量':dfTrain['category'].value_counts()}
Num = pd.DataFrame(data = d).reset_index(drop = True)

# 柱状图
plt.figure(1,figsize = (10,6),dpi = 400)
plt.title('训练集类别数据量',fontsize = 15)  # 标题
labels = ['World','Sports','Business','Sci/Tech']
colors = ['skyblue', 'green', 'orange','red']
plt.bar(labels,Num['数量'], width=0.6,color=colors)
# 添加数据标签
for i in range(len(Num)):
    plt.text(labels[i], Num['数量'][i]+0.01, f'{Num["数量"][i]}', ha='center',rotation = 0,fontsize = 15)

plt.xlabel('种类',fontsize = 15)
plt.ylabel('数量',fontsize = 15)
plt.show()


# 测试集种类
print(f'种类:{dfTest.iloc[:,0].unique()}')
# 测试集各类别数据量
d2= {'类别':dfTest['category'].value_counts().index,'数量':dfTest['category'].value_counts()}
Num2 = pd.DataFrame(data = d2).reset_index(drop = True)


# 柱状图
plt.figure(2,figsize = (10,6),dpi = 400)
plt.title('测试集类别数据量',fontsize = 15)  # 标题
labels = ['World','Sports','Business','Sci/Tech']
colors = ['skyblue', 'green', 'orange','red']
plt.bar(labels,Num2['数量'], width=0.6,color=colors)
# plt.xlabel(Num['类别'])
# 添加数据标签
for i in range(len(Num2)):
    plt.text(labels[i], Num2['数量'][i]+0.05, f'{Num2["数量"][i]}', ha='center',rotation = 0,fontsize = 15)
plt.xlabel('种类',fontsize = 15)
plt.ylabel('数量',fontsize = 15)
plt.show()

【机器学习】文本多分类,机器学习,人工智能

【机器学习】文本多分类,机器学习,人工智能

高频词词云

 画出训练集中,4种分类的新闻标题的top10的高频词云,需要借助wordcloud库

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from collections import defaultdict

# 创建一个存储每个类别文本的字典
category_text = defaultdict(str)

# 将每个类别的文本合并到对应的字典项中
for category, sentence in zip(dfTrain['category'], dfTrain['title']):
    category_text[category] += sentence + ' '

# 生成词云图像并绘制
for category, text in category_text.items():
    wordcloud = WordCloud(width=800, height=400,max_words=10, background_color="white").generate(text)
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.title(f'Word Cloud for Category {category}',fontsize = 30)
    plt.axis("off")
    plt.show()

 【机器学习】文本多分类,机器学习,人工智能

         根据我们事先的得知的数字与类别的对应关系:1-World,2-Sports,3-Business,4-Sci/Tech,观察每种类别的高频词云图,可以看出对于world,常出现诸如Iraq、US等国家名称,对于Sports类,常出现Win,Game等相关词汇,对于Business类,常出现deal,oil,price等相关词汇,对于Sci/Tech类,常出现MicroSoft,Intel等相关词汇。因此,每一类的高频词云是符合当前类的特征的。

模型预测

思路:为了能使模型能够对文本进行预测,首先需要使用TF-IDF向量化器进行文本特征提取(至于原理什么的,我不知道,AI生成的)。然后再次基础上借助预测模型进行多分类预测,在训练集中训练,测试集中测试

使用朴素贝叶斯

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report

# 划分x,y
X_train = dfTrain['title']
X_test = dfTest['title']
y_train  = dfTrain['category']
y_test  = dfTest['category']
# 文本特征提取,使用词袋模型
vectorizer = CountVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
# 训练朴素贝叶斯分类器
clf = MultinomialNB()
clf.fit(X_train_vec, y_train)
# 预测
y_pred = clf.predict(X_test_vec)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
# 输出分类报告
print(classification_report(y_test, y_pred))

下图为朴素贝叶斯的预测结果,总体的预测准确率为0.87。但是对于不同类别的预测效果也不同,可以看出朴素贝叶斯对类别2的预测效果最好的,精确度、召回率、f1分数均能达到0.9以上 

【机器学习】文本多分类,机器学习,人工智能

画出混淆矩阵 

from sklearn.metrics import confusion_matrix
import seaborn as sns

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)

# 绘制混淆矩阵
plt.figure(figsize=(8, 6),dpi = 400)
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=clf.classes_, yticklabels=clf.classes_)
plt.xlabel('预测')
plt.ylabel('实际')
plt.title('混淆矩阵')
plt.show()

下图为朴素贝叶斯预测的混淆矩阵。可以看出对于朴素贝叶斯模型来说,容易将第1类错误预测为第3类,第2类错误预测为第1类,第3类错误预测为第1、4类,第4类错误预测为第3类。 

【机器学习】文本多分类,机器学习,人工智能文章来源地址https://www.toymoban.com/news/detail-731566.html

到了这里,关于【机器学习】文本多分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计:基于机器学习的草莓成熟度识别分类系统 人工智能 python 目标检测

    目录 前言 项目背景 数据集 设计思路 更多帮助     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充

    2024年04月27日
    浏览(37)
  • 基于残差网络的人工智能文本分类方法

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着互联网和电子商务的快速发展,文本分类技术在自然语言处理领域取得了重要地位。在实际应用中,人们需要处理大量的文本数据,例如新闻报道、社交媒体内容、公司业务邮件等。自动化文本分类方法可以帮助人们快

    2024年02月07日
    浏览(29)
  • 人工智能中的文本分类:技术突破与实战指导

    在本文中,我们全面探讨了文本分类技术的发展历程、基本原理、关键技术、深度学习的应用,以及从RNN到Transformer的技术演进。文章详细介绍了各种模型的原理和实战应用,旨在提供对文本分类技术深入理解的全面视角。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网

    2024年02月05日
    浏览(24)
  • 【人工智能】监督学习、分类问题、决策树、信息增益

    什么是决策树 —— 基本概念 非叶节点:一个属性上的测试,每个分枝代表该测试的输出 叶节点:存放一个类标记 规则:从根节点到叶节点的一条属性取值路径 模型训练:从已有数据中生成一棵决策树 分裂数据的特征,寻找决策类别的路径 相同的数据,根据不同的特征顺

    2024年02月16日
    浏览(37)
  • 机器学习入门教学——人工智能、机器学习、深度学习

    1、人工智能 人工智能相当于人类的代理人,我们现在所接触到的人工智能基本上都是弱AI,主要作用是正确解释从外部获得的数据,并对这些数据加以学习和利用,以便灵活的实现特定目标和任务。 例如: 阿尔法狗、智能汽车 简单来说: 人工智能使机器像人类一样进行感

    2024年02月09日
    浏览(63)
  • 人工智能|机器学习——基于机器学习的舌苔检测

    基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔质等舌象特征,了解人体内的体质信息从而对症下药。 传统中医的舌诊主要依赖

    2024年02月22日
    浏览(50)
  • 人工智能与机器学习

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 专栏:《机器学习》 ​ ​ ☞什么是人工智能、机器学习、深度学习 人工智能这个概念诞生于1956年的达特茅斯

    2024年02月02日
    浏览(45)
  • 【机器学习】人工智能概述

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.人工智能概述 1.1 机器学习、人工智能与深度学习 1.2 机器学习、深度学习能做些什么

    2024年02月09日
    浏览(44)
  • 机器学习--人工智能概述

    入门人工智能,了解人工智能是什么。为啥发展起来,用途是什么,是最重要也是最关键的事情。大致有以下思路。 人工智能发展历程 机器学习定义以及应用场景 监督学习,无监督学习 监督学习中的分类、回归特点 知道机器学习的开发流程 人工智能在现实生活中的应用

    2024年01月19日
    浏览(44)
  • 人工智能与机器人|机器学习

    原文链接: https://mp.weixin.qq.com/s/PB_n8woxdsWPtrmL8BbehA 机器学习下包含神经网络、深度学习等,他们之间的关系表示如图2-7所示。 图2-7 关系图 那么什么是机器学习、深度学习、他们的区别又是什么呢? 2.7.1 什么是机器学习? 机器学习是 人工智能 (AI) 和计算机科学的一个分支,

    2024年02月06日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包