机器学习:基于TF-IDF算法、决策树,使用NLTK库对亚马逊美食评论进行情绪分析

news2025/1/14 1:07:36

在这里插入图片描述

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控循环单元、大型语言模型和强化学习模型

对于文本分析,我们将使用 NLTK 库。NLTK 是构建 Python 程序以处理人类语言数据的领先平台。它为 50 多个语料库和词汇资源(如 WordNet)提供了易于使用的接口,同时还提供了一套用于分类、标记化、词干化、标记、解析和语义推理的文本处理库,工业级 NLP 库的封装器,以及一个活跃的讨论论坛。

目录

  • 1. 相关库和数据集
    • 1.1 相关库介绍
    • 1.2 数据集介绍
    • 1.3 数据去重统计
    • 1.4 数据预处理
  • 2. 探索性数据分析
    • 2.1 数据集统计分析
    • 2.2 转换文本为矢量
  • 3. 模型训练、评估和预测
  • 4. 结论

1. 相关库和数据集

1.1 相关库介绍

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果,用于展现数据之间的相互关系。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
  • wordcloud – 单词云是在一张醒目的图片中显示许多单词的漂亮方法。
  • TF-IDF – 是一种用于信息检索与数据挖掘的常用加权技术。
import re
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

import nltk
from nltk.corpus import stopwords
from sklearn.model_selection import train_test_split 
from sklearn.feature_extraction.text import TfidfVectorizer 
from tqdm import tqdm 

nltk.download('stopwords')
print(stopwords.words('english'))

1.2 数据集介绍

该数据集由亚马逊上的美食评论组成。数据的时间跨度超过 10 年,包括截至 2012 年 10 月的所有约 500,000 条评论。评论包括产品和用户信息、评分和纯文本评论。它还包括亚马逊所有其他类别的评论。

# Read in data
df = pd.read_csv('Reviews.csv')
df.head()

描述统计

1.3 数据去重统计

pd.unique(df['Score'])
array([5, 1, 4, 2, 3], dtype=int64)

让我们看看相同的计数图

plt.style.use('ggplot')

ax = df['Score'].value_counts().sort_index() \
    .plot(kind='bar',
          title='Count of Reviews by Stars',
          figsize=(10, 5))
ax.set_xlabel('Review Stars')
plt.show()

统计图
要将情绪预测为正(数值 = 1)或负(数值 = 0),我们需要将评级列更改为另一列 0 和 1 类别。为此,条件将类似于如果评级小于或等于 4,则它是负数 (0) 或正数 (1)。为了更好地理解,请参阅下面的代码。

# rating label(final) 
pos_neg = [] 
for i in range(len(df['Score'])): 
	if df['Score'][i] >= 5: 
		pos_neg.append(1) 
	else: 
		pos_neg.append(0) 

df['label'] = pos_neg 

1.4 数据预处理

接下来,让我们创建用于预处理数据集的函数

def preprocess_text(text_data): 
	preprocessed_text = [] 

	for sentence in tqdm(text_data): 
		# Removing punctuations 
		sentence = re.sub(r'[^\w\s]', '', sentence) 

		# Converting lowercase and removing stopwords 
		preprocessed_text.append(' '.join(token.lower() 
										for token in nltk.word_tokenize(sentence) 
										if token.lower() not in stopwords.words('english'))) 

	return preprocessed_text 

现在,我们可以为数据集实现此函数,代码如下。

preprocessed_review = preprocess_text(df['Text'].values) 
df['Text'] = preprocessed_review

一旦我们完成了预处理。让我们看看前 5 行,看看改进后的数据集。

df.head()

数据描述

2. 探索性数据分析

探索性数据分析(Exploratory Data Analysis,EDA)是指对已有数据在尽量少的先验假设下通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,该方法在上世纪70年代由美国统计学家J.K.Tukey提出。

2.1 数据集统计分析

首先,让我们看看积极和消极情绪各有多少计数。

df["label"].value_counts()
label
1    363122
0    205332
Name: count, dtype: int64

为了更好地了解单词的重要性,让我们创建标签为 1 的所有单词的词云,即 “正”。

from wordcloud import WordCloud
consolidated = ' '.join( 
	word for word in df['Text'][df['label'] == 1].astype(str)) 
wordCloud = WordCloud(width=1600, height=800, 
					random_state=21, max_font_size=110) 
plt.figure(figsize=(15, 10)) 
plt.imshow(wordCloud.generate(consolidated), interpolation='bilinear') 
plt.axis('off') 
plt.show()

词云
很明显,“很棒的产品”、“花生酱”、“绿茶”、“无麸质”、"强烈推荐 "等词在正面评论中出现的频率很高,这符合我们的假设。

2.2 转换文本为矢量

TF-IDF 计算一系列或语料库中的单词与文本的相关性。含义与单词在文本中出现的次数成比例增加,但由语料库(数据集)中的单词频率补偿。我们将使用以下代码实现此功能。

from sklearn.feature_extraction.text import TfidfVectorizer 
cv = TfidfVectorizer(max_features=2500) 
X = cv.fit_transform(df['Text']).toarray()
X
array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])

3. 模型训练、评估和预测

分析和矢量化完成后。现在我们可以探索任何机器学习模型来训练数据。但在此之前,要对数据进行训练-测试拆分。

X_train, X_test, y_train, y_test = train_test_split(X, df['label'], 
													test_size=0.33, 
													stratify=df['label'], 
													random_state = 42)

现在我们可以训练任何模型,让我们来探索决策树的预测方法。

from sklearn.tree import DecisionTreeClassifier 

model = DecisionTreeClassifier(random_state=0) 
model.fit(X_train,y_train) 

#testing the model 
pred = model.predict(X_train) 
print(accuracy_score(y_train,pred))
0.9997978280961183

让我们来看看混淆矩阵的结果。

from sklearn import metrics 
cm = confusion_matrix(y_train,pred) 

cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = cm, 
											display_labels = [False, True]) 

cm_display.plot() 
plt.show()

混淆矩阵

4. 结论

决策树分类器在处理这些数据时表现良好。今后,我们还可以通过从网站上抓取大量数据的方式来处理这些数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一天复习Qt文件读取

Qt文件操作: 1、QFile QTextStream操作文件案例: 1、打开文件 QFile file(absolute filepath | relative path); file.readLine()返回内容长度,如果为-1就是读取失败 file. Close()读取后关闭 file.errorString()返回文件打开发生的错误2、…

数据仓库实验三:分类规则挖掘实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、创建数据库和表2、决策树分类规则挖掘(1)新建一个 Analysis Services 项目 jueceshu(2)建立数据源视图(3)建立挖掘结构 DST.dmm(4&#xff…

16.接口自动化学习-编码处理与装饰器

1.编码和解码 编码:将自然语言翻译成计算机可以识别的语言 hello–01010 解码:将机器识别的语言翻译成自然语言 2.编码格式 UTF-8 GBK unicode 3.编码操作 #编码操作str1"hello呀哈哈哈"str2str1.encode(gbk)print(str2)print(type(str2))…

FPGA ov5640视频以太网传输

1 实验任务 使用DFZU4EV MPSoC 开发板及双目OV5640摄像头其中一个摄像头实现图像采集,并通过开发板上的以太网接口发送给上位机实时显示。 2 Verilog代码 2.1 顶层模块 timescale 1ns / 1ps //以太网传输视频顶层模块module ov5640_udp_pc (input sys_cl…

在WPS表格(Excel)中,每10行增加一个特定的值

注:如下为WPS表格操作演示 例如1-15的数值是1,16-30就变为2,31-45就变为3,类推! 1、在B1单元格输入一个起始值,B2单元格输入公式IF(MOD(ROW(),15)0,B11,B1) 然后鼠标放到B2单元格右下角小点处&…

开机弹窗找不到OpenCL.dll是怎么回事,哪种修复方法更推荐

当用户在操作电脑过程中遇到系统提示“OpenCL.dll丢失”时,这究竟是怎么一回事呢?OpenCL.dll,作为Open Computing Language(开放计算语言)的重要动态链接库文件,它在图形处理器(GPU)…

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

县供电公司员工向媒体投稿发文章用亲身经历告诉你并不难

在县供电公司的日子里,我肩负着一项至关重要的使命——信息宣传工作。这不仅仅是一份职责,更是连接公司与外界的桥梁,通过新闻稿件传递我们的声音,展示我们的成果。然而,回忆起刚刚踏入这个领域的时光,那段经历至今让我感慨万千。 初涉投稿,步履维艰 刚接手这项工作时,我的投稿…

信息化飞速发展下,源代码防泄密方案该如何选择?常见四种有效方案分享

信息化时代发展迅速,数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位,无纸化办公场景越来越多,数据泄露的时间也层出不穷。例如:世界最大职业中介网站Monster遭到黑客大规模攻击,黑客窃取在网站注册的数百万…

Dockerfile实践java项目

目的:用java项目测试dockerfil部署(前提是安装好了docker) 部署准备文件如下 1. java项目 java项目demo地址 https://gitee.com/xiaoqu_12/dockerfileDemo.git 或者百度网盘直接下载打包好的jar包 链接:https://pan.baidu.com/s/…

PostgreSQL的学习心得和知识总结(一百四十一)|深入理解PostgreSQL数据库数据库角色的使用及预定义角色的原理

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

您的浏览器不支持 undefined 代理认证!如有问题请联系您的浏览器支持,请勿反馈此问题给 SwitchyOmega.

一、【问题描述】 PAC 文件是一个 JavaScript 文件,用于定义客户端的代理规则。您可以在 PAC 文件中编写规则,根据不同的目标网址或其他条件,决定是否通过代理服务器进行访问。您可以将 PAC 文件部署到服务器上,并在客户端配置浏…

QT学习PCL库代码

找关键点keypoints 绿色的点就是keypoints outofcore

应用软件安全保证措施方案书

系统安全保证措施方案—word原件 软件全套资料进主页获取或者本文末个人名片直接获取。

【Docker学习】docker run的端口映射-p和-P选项

docker run的端口映射选项分为-p(小写,全称--publish),-P(大写,全称--publish-all),之前认为只有改变容器发布给宿主机的默认端口号才会进行-p的设置,而不改变默认端口号…

STC8增强型单片机开发 【第一个程序 - 点亮第一盏灯】

目录 一、创建项目 1. 创建一个新的项目 ​编辑 2. 配置开发板信息 ​编辑 3. 取消汇编配置 4. 项目结构 二、编码实现 1. 项目准备 2. 代码实现 点灯: 熄灯: 3. 编译烧录运行 配置编译输出 保存和编译代码 ​编辑 烧录 一、创建项目 1. …

静态照片怎么合成gif?详细介绍一个方法

我们在各大平台中都能看到各种样式的gif动图。Gif动图其实就是由一帧一帧的静态图片合成的动态效果的gif,想要制作gif动画可以通过使用在线图片合成(https://www.gif5.net/)工具-GIF5工具网,手机、pc均可操作,只需要上…

STC8增强型单片机开发——C51版本Keil环境搭建

一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包(可以从Keil官网下载)一款8051单片机开发板 三、搭建流程 环境搭建的基本流程&#xf…

第八届大数据与物联网国际会议(BDIOT 2024)即将召开!

第八届大数据与物联网国际会议(BDIOT 2024)将于2024年9月14-16日在澳门圣若瑟大学举行。数聚未来,物联世界!BDIOT 2024旨在搭建为各位与会代表展示自己研究成果、分享经验、建立联系和开展合作的平台,共同探讨大数据与物联网领域的未来发展方…