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

在这里插入图片描述

前言

系列专栏:机器学习:高级应用与实践【项目实战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.mfbz.cn/a/604875.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读】 ICCV-2021-3D Local Convolutional Neural Networks for Gait Recognition

motivation :现有方法方法无法准确定位身体部位,不同的身体部位可以出现在同一个条纹(如手臂和躯干),一个部分可以出现在不同帧(如手)的不同条纹上。其次,不同的身体部位具有不同的尺度,即使是不同帧中的同一部分也可以出现在不同…

【光速上手 Hydra 】一行代码自动跑多次实验,Hydra 中的 Multirun 参数如何使用?

Hydra 是一个开源的 Python 框架,简化了研究和其他复杂应用的开发。其关键特性是能够通过组合动态地创建一个分层次的配置,并通过配置文件和命令行进行覆盖。Hydra 的名称来源于其能够运行多个类似的作业 - 就像一个有多个头的九头蛇一样。 主要特性&am…

泽众财务RPA机器人常见五个应用场景

泽众RPA(即机器人流程自动化,Robotic Process Automation, RPA)解决方案是依托于各类先进信息技术手段的虚拟劳动力 (数字劳动力),根据预先设定的程序操作指令对任务进行自动化处理,实现业务流程…

解锁机械之美:发动机设备拆解可视化揭秘

在现代工程技术的世界里,发动机作为机械设备的心脏,始终扮演着至关重要的角色。图扑的发动机设备拆解可视化技术,以其独特的视角和精确的细节,为我们开启了一扇了解复杂机械结构的新窗。通过高清晰度的三维图像和动画,…

在阿里云K8S容器中,部署websocket应用程序的总结

一、背景 有一个websocket应用程序,使用spring boot框架开发,http端口号是6005,提供的是websocket服务,所以它还监听一个8889端口的tcp协议。 现在要把它部署到阿里云的k8s容器里,本文着重描述service层的配置。 因…

鸿蒙开发接口Ability框架:【 (ServiceExtensionAbility)】

ServiceExtensionAbility ServiceExtensionAbility模块提供ServiceExtension服务扩展相关接口的能力。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。 导入…

【linux软件基础知识】-死锁问题

死锁问题 当两个或多个线程由于每个线程都在等待另一个线程持有的资源而无法继续时,就会发生死锁 如下图所示, 在线程 1 中,代码持有了 L1 上的锁,然后尝试获取 L2 上的锁。 在线程 2 中,代码持有了 L2 上的锁,然后尝试获取 L1 上的锁。 在这种情况下,线程 1 已获取 L…

减速机齿数速算

1.齿轮相关参数 1.1 模数 , 因为 齿数*齿距 Pi*直径 所以:直径/齿数 齿距/PI 模数 国标现行标准(截止2024/5)是: GB/ 1357-2008 / ISO 54-1996 模数有国标的一个序列标准: 1.2.轴径 轴径的国标是&a…

【测试报告】星光日册

⭐ 作者:Jwenen 🌱 作者主页:Jwenen的个人主页 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 测试报告 1. 项目介绍2. 测试用例框架3. 自动化测试源码 1. 项目介绍 “星光日册”项目实现了用…

追踪攻击数据包中的真实IP地址:方法与技巧

在网络安全领域,追踪攻击数据包中的真实IP地址是一项至关重要的任务。通过确定攻击者的真实IP地址,可以有效地识别和阻止网络攻击行为,提高网络安全防御水平。IP数据云IP地址查询将介绍几种常用的方法和技巧,帮助安全人员有效追踪…

【Linux】CAN根据时钟频率、波特率计算采样点详解

1、采样点知识回顾 参考博客:【CAN】知识点:帧类型、数据帧结构、传输速率、位时间、采样点 CAN 采样点是指在一个数据位的传输周期内,接收器实际采样数据的时间点。这个时间点是以百分比来表示的,它决定了在数据位的传输周期中,何时读取数据位的值。 正确设置采样点对…

60*13薪,外包到新疆...去吗?

大家好,我是白露呀。 今天我在牛客上看到一篇帖子,一位网友说自己收到一个 offer ,薪资很高:60k*13,大约一年有近80万。 但是有个要求是外包到新疆的乌鲁木齐,他拿不定主意,就在牛客上发了这个…

华为数据之道第三部分导读

目录 导读 第三部分 第7章 打造“数字孪生”的数据全量感知能力 “全量、无接触”的数据感知能力框架 数据感知能力的需求起源:数字孪生 数据感知能力架构 基于物理世界的“硬感知”能力 “硬感知”能力的分类 “硬感知”能力在华为的实践 基于数字世界的…

Options API:选项式 API改成Composition API:组合式 API的留言板

让我欢喜让我忧 改成Composition API:组合式 API的代码&#xff0c; <template><!-- start --><span class"span_checkbox">操作<input type"checkbox" v-model"showInput" value"操作" /></span><…

VueReal将在Display Week上推出microLED创新技术

公司展示将microLED从晶圆转移到背板的“改变游戏规则”的平台 在2024年显示周&#xff08;5月12日至16日在圣何塞举行&#xff09;上&#xff0c;VueReal将展示其MicroSolid打印平台&#xff0c;并展示其在推动微LED显示器和其他微型半导体器件在智能手机显示器和AR/VR解决方案…

探索鸿蒙开发:鸿蒙系统如何引领嵌入式技术革新

嵌入式技术已经成为现代社会不可或缺的一部分。而在这个领域&#xff0c;华为凭借其自主研发的鸿蒙操作系统&#xff0c;正悄然引领着一场技术革新的浪潮。本文将探讨鸿蒙开发的特点、优势以及其对嵌入式技术发展的深远影响。 鸿蒙操作系统的特点 鸿蒙&#xff0c;作为华为推…

贪心算法-----柠檬水找零

今日题目&#xff1a;leetcode860 题目链接&#xff1a;点击跳转题目 分析&#xff1a; 顾客只会给三种面值&#xff1a;5、10、20&#xff0c;先分类讨论 当收到5美元时&#xff1a;不用找零&#xff0c;面值5张数1当收到10美元时&#xff1a;找零5美元&#xff0c;面值5张数…

jmeter控制器讲解

1&#xff0c;随机顺序控制器和随机控制器的区别&#xff1a;随机顺序控制器下所有的接口都会执行&#xff0c;只是执行顺序是随机的&#xff0c;随机控制器下所有的接口中随机执行一个接口&#xff0c;其余接口不执行。

C++之大数运算

溪云初起日沉阁 山雨欲来风满楼 契子✨ 我们知道数据类型皆有范围&#xff0c;一旦超出了这个范围就会造成溢出问题 今天说说我们常见的数据类型范围&#xff1a; 我们平时写代码也会遇到数据类型范围溢出问题&#xff1a; 比如 ~ 我们之前写的学生管理系统在用 int类型 填写…

学习笔记:IEEE 1003.13-2003(POSIX实时与嵌入式规范)

一、文档 在线参考&#xff1a; IEEE 1003.13-2003 免费下载Draft 版本&#xff08;pdf&#xff09;&#xff1a;IEEE Std. 1003.13 二、概念 1、POSIX标准 可移植操作系统接口&#xff08;英语&#xff1a;Portable Operating System Interface&#xff0c;缩写为POSIX&a…
最新文章