机器学习:基于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 snsimport 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.mzph.cn/diannao/8938.shtml

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

相关文章

外贸人必备的9类工具合集-36个提高效率神器推荐!

做外贸,你需要的不只是一些基本的知识,还得有多种技能傍身,比如找新客户、写有效的邮件、分析竞争对手,还有在社交媒体上做营销但你可能发现了,有的人做外贸轻轻松松就能收到很多询盘,而有的人忙得团团转却…

python实现txt文件内容对比功能

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.演示 四.代码分析 一.前言 内容对比是一种常见的信息分析和研究方法,主要涉及对不同来源、类型或版本的内容进行比

HTTP请求三方接口绕过https证书检查

问题:在http请求https接口过程中经常会遇到SSL证书检查或者证书过期 ** sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed ** 解决办法:绕过证书检查…

[NSSRound#1 Basic]sql_by_sql

[NSSRound#1 Basic]sql_by_sql 这题没啥难的&#xff0c;二次注入盲注的套题 先注册&#xff0c;进去有个修改密码 可能是二次注入 修改密码处源码 <!-- update user set password%s where username%s; -->重新注册一个admin-- 获得admin身份&#xff08;原理看sqli-l…

分享10个高质量宝藏网站~

分享一波高质量宝藏网站~ 这10个宝藏网站&#xff0c;个个都好用到爆&#xff0c;娱乐、办公、学习都能在这里找到&#xff01; 1、Z-Library https://zh.zlibrary-be.se/ 世界最大的免费电子书下载网站&#xff01;电子书资源超千万&#xff0c;不过这个网站不太稳定&#…

MongoDB Atlas Vector Search与Amazon Bedrock集成已全面可用

亮点前瞻 ●MongoDB Atlas Vector Search知识库与Amazon Bedrock的最新集成&#xff0c;将极大加速生成式AI应用的开发。 ●诺和诺德利用MongoDB Atlas Vector Search与Amazon Bedrock集成&#xff0c;加速构建AI应用程序。 MongoDB&#xff08;纳斯达克股票代码&#xff1a…

springboot 整合 knife4j-openapi3

适用于&#xff1a;项目已使用shiro安全认证框架&#xff0c;整合knife4j-openapi3 1.引入依赖 <!-- knife4j-openapi3 --> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifa…

深度学习Day-16:实现天气预测

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a;根据提供的数据集对RainTomorrow进行预测 一、 基础配置 语言环境&#xff1a;Python3.7编译器选择…

【S32K3 MCAL配置】-7.2-GPT Driver:仿OS,周期/定时调用APP SWC和BSW模块的主函数

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:当没有移至FreeRTOS时,如何仿OS,快速搭建“若干个周期执行的Task”,在其中周期/定时调用APP SWC和BSW模块的主函数。 并在这个简易的仿OS中,如何设置“主函数调用的先后顺序”,以及如何设置“主函…

【Docker】新手教程的第一个demo:Wordpress

1 任务简单介绍 WordPress是什么&#xff1a; 是一个常用博客软件简单易部署&#xff0c;只需要两个容器&#xff08;业务容器 数据库容器&#xff09; 本文借鉴博客&#xff0c;使用自建 WordPress 容器方法在Docker上部署Wordpress&#xff0c;本地环境为Mac时使用该博客…

浏览器原理---浏览器同源策略

1、什么是同源策略 同源策略限制了从同一个源加载的文档或脚本如何与另一个源的资源进行交互。这是浏览器的一个用于隔离潜在恶意文件的重要的安全机制。同源指的是&#xff1a;协议、端口号、域名必须一致。 同源策略&#xff1a;protocol&#xff08;协议&#xff09;、dom…

如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问

文章目录 前言1. 安装 Raspberry Pi OS2. 测试 web 站点3. 安装静态样例站点4. 将web站点发布到公网4.1 安装 Cpolar4.2 cpolar进行token认证4.3 生成cpolar随机域名网址4.4 生成cpolar二级子域名4.5 将参数保存到cpolar配置文件中4.6 测试修改后配置文件4.7 配置cpolar服务开机…

申请邓白氏编码,提示“上传的营业执照与填写信息不一致”

1、问题&#xff1a;申请邓白氏编码&#xff0c;填写企业信息时&#xff0c;提示“上传的营业执照与填写信息不一致” 解决&#xff1a;检查企业名称里是否有括号等&#xff0c;改为英文字符 2、 问题&#xff1a;从apple网站查询邓白氏编码&#xff0c;显示列表里没有自家公司…

mindjourney和stable diffusion该怎么选?

很多刚开始接触AI绘画的人来说&#xff0c;mindjourney和stable diffusion该怎么选&#xff1f; 坦白来说&#xff0c;这两种对于普通用户来说&#xff0c;门槛都会有一些。 mj的门槛在于需要梯子&#xff0c;而且要想持续出图&#xff0c;还需要付费&#xff0c;对以免费为乐…

实在Agent智能体:引领智能自动化新纪元

在数字化转型的浪潮中&#xff0c;实在智能科技有限公司凭借其前沿技术&#xff0c;推出了实在Agent智能体——一款革命性的超自动化智能体。它不仅代表了人工智能技术的新高度&#xff0c;更预示着未来工作方式的变革。 什么是实在Agent智能体&#xff1f; 实在Agent智能体是…

《洛神赋》摘录

零&#xff0c;简介 《洛神赋》是三国时期曹魏文学家曹植创作的辞赋。此赋虚构了作者自己与洛神的邂逅和彼此间的思慕爱恋&#xff0c;洛神形象美丽绝伦&#xff0c;人神之恋飘渺迷离&#xff0c;但由于人神道殊而不能结合&#xff0c;最后抒发了无限的悲伤怅惘之情。全篇大致…

电脑文件加密软件有哪些?口碑、安全性最好的文件加密软件

某企业的一位员工因不慎将包含敏感客户数据的电脑丢失&#xff0c;导致企业面临巨大的法律风险和经济损失。 这一事件凸显了电脑文件加密的必要性。 如果该企业事先采用了文件加密软件对敏感数据进行保护&#xff0c;即使电脑丢失&#xff0c;攻击者也无法轻易获取到文件内容…

开发Web3 ETF的技术难点

开发Web3 ETF&#xff08;Exchange-Traded Fund&#xff0c;交易所交易基金&#xff09;软件时&#xff0c;需要注意以下几个关键问题。开发Web3 ETF软件是一个复杂的过程&#xff0c;涉及到金融、法律和技术多个领域的专业知识。开发团队需要综合考虑上述问题&#xff0c;以确…

修改JupyterNotebook文件存储位置

Jupyter Notebook 1、通过AnaConda安装Jupyter Notebok 2、在开始菜单里找到并打开Anaconda Prompt&#xff0c;输入如下命令&#xff0c;然后执行。 jupyter notebook --generate-config4、打开以下文件 找到 C:/Userzh/.../.jupyter 打开 jupyter_notebook_config.py 取消…

21物联1班shift五次

1.选择推荐选项 2.等待 3.点击取消 4.选择查看问题详细信息 5.点击txt文件 6.找到system文件夹&#xff0c;将sethc改为qqq&#xff0c;将cmd文件改为sethc文件 7.单击完成。重新启动虚拟机。连续按五次shift出现cmd框&#xff0c;修改密码