餐厅评论情感分析

在本文中,将探讨如何使用机器学习技术对餐厅评论数据集进行情感分析。这个数据集包含了顾客的正面或负面评论,目标是构建一个模型,能够预测给定评论的情感倾向。

数据集概览

首先,来查看数据集。以下是数据集的下载链接,可以下载并继续操作。

数据集中包含两列:'Review'和'Liked'。'Review'列包含了顾客的评论,而'Liked'列则表示评论的情感倾向,其中1代表正面评论,0代表负面评论。

导入必要的库

在开始构建机器学习模型之前,需要导入一些基础且重要的库。

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns

创建数据框架

下载上述数据集,并使用pandas创建数据框架。

df = pd.read_table("C:/Users/Admin/Downloads/Restaurant_Reviews.csv")

请将路径替换为电脑上餐厅评论数据集的实际路径。这将把数据框架保存在变量df中。

查看数据框架

使用以下命令查看数据框架的前几行和后几行,以及行列数。

df df.info()

info()方法提供了数据框架的详细信息,包括列数、列标签、非空条目数、列的数据类型和内存使用情况。

统计描述

使用describe()方法可以获得数据框架的统计描述,包括总数、均值、标准差、最小值、最大值以及数据的25%、50%、75%分位数。

df.describe()

查看列信息

使用columns属性查看数据框架的列名。

df.columns

nunique()方法返回特定列中唯一值的数量。

df['Liked'].nunique()

unique()方法返回特定列中的唯一值。

print(df['Liked'].unique())

value_counts()方法返回特定值在列中重复的次数。

df['Liked'].value_counts()

数据可视化

使用matplotlib和seaborn库对数据进行可视化。这是一个计数图,用于统计列中的条目并绘制出来。

plt.figure(figsize=(8,5)) sns.countplot(x=df.Liked);

定义X和Y

机器学习中,X代表输入特征,Y代表模型需要预测的输出。在数据集中,'Review'列是输入特征,而'Liked'列是模型需要预测的目标。

x = df['Review'].values y = df['Liked'].values

划分训练集和测试集

使用train_test_split从scikit-learn库中划分数据集。

from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

查看训练集和测试集的形状

使用shape属性查看训练集和测试集的形状。

x_train.shape x_test.shape y_train.shape y_test.shape

导入CountVectorizer

从scikit-learn库中导入CountVectorizer,并设置stop_words为'english'。

from sklearn.feature_extraction.text import CountVectorizer vect = CountVectorizer(stop_words='english') x_train_vect = vect.fit_transform(x_train) x_test_vect = vect.transform(x_test)

导入支持向量分类器(SVC)

支持向量机(SVM)库中导入支持向量分类器(SVC),并将其赋值给一个名为model的变量。

from sklearn.svm import SVC model = SVC()

训练模型

使用fit方法训练模型,并将训练数据集作为参数传递给模型。

model.fit(x_train_vect, y_train)

预测测试结果

使用predict方法预测测试结果,并将测试数据集的x变量作为参数传递给模型。

y_pred = model.predict(x_test_vect)

评估模型

使用accuracy_score从scikit-learn metrics库中评估模型,并比较预测数据集和测试数据集。

from sklearn.metrics import accuracy_score accuracy_score(y_pred, y_test)

模型的准确率为79.2%。

使用Pipeline

在不使用pipeline的情况下,需要分别对每个步骤进行评估。

vect = CountVectorizer() tfidf = TfidfTransformer() clf = SGDClassifier() vX = vect.fit_transform(Xtrain) tfidfX = tfidf.fit_transform(vX) predicted = clf.fit_predict(tfidfX)

现在使用pipeline,只需要很少的代码行。

pipeline = Pipeline([ ('vect', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', SGDClassifier()), ]) predicted = pipeline.fit(Xtrain).predict(Xtrain) predicted = pipeline.predict(Xtest)

使用Pipeline训练模型

导入make_pipeline从pipeline库中,并传递CountVectorizer和SVC作为参数。

from sklearn.pipeline import make_pipeline text_model = make_pipeline(CountVectorizer(), SVC()) text_model.fit(x_train, y_train)

预测测试结果

使用predict方法预测测试结果。

y_pred = text_model.predict(x_test)

评估模型

使用accuracy_score评估新模型。

accuracy_score(y_pred, y_test)

模型的准确率为79.2%。

保存模型

使用joblib保存模型。

import joblib joblib.dump(text_model, 'Project')

再次使用时,可以使用load方法检索模型。

text_model = joblib.load('Verzeo_Major_Project')

现在模型已经训练完成,可以用于实际预测。

text_model.predict(['hello!!Love Your Food'])

模型预测结果为1,表示正面评论。

text_model.predict(["omg!!it was too spice and i asked you don't add too much "])
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485