机器学习:基于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,一经查实,立即删除!

相关文章

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编译器选择…

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

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

如何在树莓派 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;显示列表里没有自家公司…

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

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

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

某企业的一位员工因不慎将包含敏感客户数据的电脑丢失&#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;修改密码

【Java】从0实现一个基于SpringBoot的个人博客系统

从0实现一个基于SpringBoot的个人博客系统 项目介绍准备工作数据准备创建项目准备前端页面编写配置文件 项目公共模块实体类公共层业务代码持久层实现博客列表实现博客列表约定前后端交互接口 实现博客详情约定前后端交互接口实现服务器代码 实现登录JWT令牌JWT令牌生成和校验实…

Salesforce Flow - Screen Flow设置详解

今天给大家来详细介绍下如何设置Screen Flow&#xff1a; 一、Screen Flow元素介绍 先介绍下Screen Flow&#xff08;屏幕流&#xff09;的界面及元素&#xff0c;如下图Screen Flow的设计看板包含有元素、字段及界面看板&#xff1b;Component中包含有各种类型的字段可以通过…

读天才与算法:人脑与AI的数学思维笔记22_中文房间

1. 华生的工作模式 1.1. 请你想象一个巨大的场景&#xff0c;其中有单词、名字和其他可能的答案&#xff0c;它们散布在各处 1.1.1. IBM所做的第一步是以某种连贯的方式排列单词 1.1.2. 第二步是理解每个问题&#xff0c;并为该问题生成候选位置标记 1.1.2.1. 爱因斯坦会演…

IT项目管理-大题【太原理工大学】

一、根据进度网络写出时间参数表、关键路径、总工期 此类题一般是给一个表&#xff0c;问三问。 第一问会问某个活动的时间参数&#xff0c;但我们需要把整个表都求出来&#xff0c;否则单求一个很困难&#xff08;如果你就是不想求整张表也行&#xff0c;不是硬性要求&#xf…

vue3 - 150

目录 vue优势使用方式编写vue代码指令响应式数据其他 vue优势 功能全面生态好&#xff0c;语法简洁效率高&#xff0c;免去 DOM 操作苦&#xff0c;开发重任一肩挑&#xff01; 使用方式 1.通过cdn引入来将 Vue 应用到整个页面 2.或通过官方脚手架 create-vue来创建完整的v…