在本文中,将探讨如何使用机器学习技术对餐厅评论数据集进行情感分析。这个数据集包含了顾客的正面或负面评论,目标是构建一个模型,能够预测给定评论的情感倾向。
首先,来查看数据集。以下是数据集的下载链接,可以下载并继续操作。
数据集中包含两列:'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代表模型需要预测的输出。在数据集中,'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
从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)
从支持向量机(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的情况下,需要分别对每个步骤进行评估。
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)
导入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 "])