概率图模型3-朴素贝叶斯之用户评论情感分析

1.数据读取

import pandas as pd
data = pd.read_excel('产品评价.xlsx')
display(data.head(),data.shape)

在这里插入图片描述

(1080, 3)

2.中文分词

words = []  # 遍历整张表格,对所有评论进行分词
for i, row in data.iterrows():
    word = jieba.cut(row['评论'])
    result = ' '.join(word) 
    words.append(result)
words[:3]

在这里插入图片描述

3.文本向量化

vect = CountVectorizer()
X = vect.fit_transform(words)
X = X.toarray()
print(X) # 每个数据长度是4075,字典的长度;出现了一个次,标记为1,出现了两次,标记为2,没有出现标记0
X.shape
[[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]]
(1080, 4075)

words_bag = vect.vocabulary_
print(words_bag)
{'iphone8': 194, 'xr': 264, '正品': 2660, '按键': 2221,..., '吃一堑长一智': 1279, '国产机': 1405}

len(words_bag) # 样本匮乏,导致模型不够稳定
4075

y = data['评价'] # 目标变量提取
y.head()
0    1
1    1
2    1
3    1
4    1
Name: 评价, dtype: int64

4.神经网络分类模型

%%time
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(64,64,32))
mlp.fit(X_train, y_train)
y_pred = mlp.predict(X_test)
print(y_pred)
[1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0
 1 1 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 0 1
 1 1 1 0 1 0 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 0 1 0 0 1 1]
Wall time: 4.38 s

result = pd.DataFrame()  # 创建一个空DataFrame 
result['预测值'] = list(y_pred)
result['实际值'] = list(y_test)
result
	预测值	实际值
0	1	1
1	0	0
...	...	...

107	1	1
108 rows × 2 columns

5.模型准确率

from sklearn.metrics import accuracy_score  
score = accuracy_score(y_pred, y_test)  # 获取预测准确度
print('------------',score)
mlp.score(X_test, y_test) # 通过模型自带的score()函数也可以获取预测准确度
------------ 0.9907407407407407
0.9907407407407407
(y_pred == y_test).mean()
0.9722222222222222

6.模型预测

comment = input('请输入您对本商品的评价:')
comment = [' '.join(jieba.cut(comment))]
print(comment)
X_try = vect.transform(comment)
y_pred = mlp.predict(X_try.toarray())
print(y_pred)
请输入您对本商品的评价:商品真棒,我非常喜欢,这是一次满意的购物,特别开心,晚上下单,第二天上午到,立体声游侠效果不错
['商品 真棒 , 我 非常 喜欢 , 这是 一次 满意 的 购物 , 特别 开心 , 晚上 下单 , 第二天 上午 到 , 立体声 游侠 效果 不错']
[1]

7.朴素贝叶斯算法

# 朴素贝叶斯模型对比
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
nb_clf = MultinomialNB()
nb_clf.fit(X_train,y_train)
y_pred = nb_clf.predict(X_test)
print(y_pred)
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
[1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 0 1 0 1 0
 1 1 0 1 0 0 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 1
 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1]
0.8888888888888888
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿值

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值