2022/12/27更新,目前代码+数据集+停用词已上传GitHub,点击此处跳转下载。
本文章总结了许多机器学习模型对于情感分析的性能,包括模型训练、预测的时间、训练集、测试集的预测准确度。
加载评论信息文件, 并获取所有评论内容及情感(其中共读取13499条评论数据,情绪有好有坏)
如下是代码实现
import csv
import numpy as np
def loadCommentFile(file_name):
all_sentences = []
with open(file_name, 'r', encoding='utf-8') as fp: #读取文件
reader = csv.reader(fp)
#读取迭代器内的所有评论信息
all_sentences = np.array([[comment[0],comment[1]] for comment in reader]) #保存格式[['评论1','评论情感标签']]
print('Step1:read {} comments in file...'.format(len(all_sentences)))
return all_sentences #返回numpy数组形式的所有评论内容及对应标签
去除评论数据集中的重复评论信息
import pandas as pd
def removeSameComment(all_sentences):
data = pd.DataFrame(all_sentences)
same_sentence_num = data.duplicated().sum() #统计重复的评论内容个数
if same_sentence_num > 0:
print('Step2:remove {} of same comments...'.format(same_sentence_num))
data = data.drop_duplicates() #删除重复的评论内容
return data.values #返回numpy数组形式的评论内容信息
使用jieba库对中文评论语句及逆行切分操作
import jieba
def getAllWords(all_sentences):
all_words = []
for sentence in all_sentences:
words = jieba.lcut(sentence[0]) #将评论切词,并存放所有切分后的评论语句
all_words.append(words)
print('Step3:jieba cut successfully...')
return np.array(all_words)
去除评论词语中已经停用的词语
def removeStopWords(file_name, all_words):
stop_words = []
with open(file_name, 'r', encoding='utf-8') as fp: #读取所有停用词
stop_words = fp.read().split('\n') #存到stop_words列表中(以换行符切分)
for sentence in all_words: #双重循环去除评论中的停用词
for word in sentence:
if word in stop_words:
sentence.remove(word)
print('Step4:remove stop-words successfully...')
return np.array(all_words) #以numpy数组返回
将所有评论信息中存在的词语生成一个词典
def getDictionary(all_words):
dictionary = []
for sentence in all_words:
for word in sentence:
if word not in dictionary:
dictionary.append(word) #将所有评论中出现的词语存入词典
print('Step5:{} words in total...'.format(len(dictionary)))
return dictionary
把所有评论中的词语信息都进行编码,编码形式为one-hot
def getOneHot(dictionary):
one_hots = []
for index,word in enumerate(dictionary): #使用one-hot编码把出现的词语转化为向量
one_hot = np.zeros(len(dictionary))
one_hot[index] = 1
one_hots.append(one_hot)
print('Step6:one-hot encoding successfully...')
return np.array(one_hots)
将评论的词语信息以word2vec的方式进行编码,并存储(这里直接使用gensim库)
from gensim.models import Word2Vec
def getWord2Vec(all_words):
#调用Word2Vec模型,将所有词语信息转化为向量
model = Word2Vec(all_words, sg=0, vector_size=300, window=5, min_count=1, epochs=7, negative=10)
model.save('word2vec_model')
print('word2vec encoding successfully...')
return model
封装所有的操作过程,最后结果返回所有预处理过后的评论数组,word2vec模型,词语词典
def getData():
all_sentences = loadCommentFile('../datasets/comments.csv')
all_sentences = removeSameComment(all_sentences)
target = all_sentences[:,1]
all_words = getAllWords(all_sentences)
all_words = removeStopWords('../file/cn-stopwords.txt', all_words)
dictionary = getDictionary(all_words)
one_hots = getOneHot(dictionary)
print('get all data successfully...')
return all_words, target, dictionary
求和评论中每个词语的word_vector,然后取平均值,即为评论语句的向量
def getSentenceVec(all_words, word2vec_model):
sentences_vector = []
for sentence in all_words:
sentence_vector = np.zeros(word2vec_model.wv.vector_size)
#取出评论中每个单词的向量累加
for word in sentence:
sentence_vector += word2vec_model.wv.get_vector(word)
#取最终结果的平均值,作为评论语句的向量,并添加到评论向量列表中
sentences_vector.append(sentence_vector/len(sentence))
#返回numpy类型的评论列表
return np.array(sentences_vector)
调用数据预处理的封装函数进行数据预处理,将每个词语使用word2vec模型转化为向量,并将所有评论转化为向量
然后对数据集进行切分为数据集与测试集
from sklearn.model_selection import train_test_split #引入拆分训练集与测试集的方法
all_words, target, dictionary = getData() #获取评论的分词形式列表、对应标签、词典
word2vec_model = getWord2Vec(all_words) #训练Word2Vec模型
word2vec_model.save('word2vec_model') #保存文件
#将每一句评论信息转化为对应的评论向量
sentences_vector = getSentenceVec(all_words, word2vec_model)
#拆分数据集为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(sentences_vector, target)
print('train_test_split successfully!')
Step1:read 13499 comments in file...
Step2:remove 1016 of same comments...
Step3:jieba cut successfully...
Step4:remove stop-words successfully...
Step5:15834 words in total...
Step6:one-hot encoding successfully...
get all data successfully...
word2vec encoding successfully...
train_test_split successfully!
from sklearn.neighbors import KNeighborsClassifier #引入KNN算法模型
import time
start = time.time()
knn = KNeighborsClassifier(n_neighbors=5) #K近邻模型训练中,n邻居个数越多越欠拟合,越少越过拟合
knn.fit(X_train, y_train) #训练KNN模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 0.014011383056640625 seconds
start = time.time()
train_score = knn.score(X_train, y_train)
test_score = knn.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.9629352702414015
Test score:0.9487343800064082
It is take 4.137312889099121 seconds
from sklearn.linear_model import LogisticRegression #引入LogisticRegression逻辑回归模型
import time
start = time.time()
#弱正则化对应过拟合,强正则化对应欠拟合
logistic_regression = LogisticRegression(C=50) #在逻辑回归中,参数C控制正则化强弱,C越大正则化越弱,C越小正则化越强
logistic_regression.fit(X_train, y_train) #训练逻辑回归模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 1.5031111240386963 seconds
start = time.time()
train_score = logistic_regression.score(X_train, y_train)
test_score = logistic_regression.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.967955565050203
Test score:0.962191605254726
It is take 0.032012939453125 seconds
from sklearn.svm import SVC #引入支持向量机分类器
start = time.time()
svc = SVC(gamma=0.1, C=100) #gamma控制类别的相似度程度,越小越好,C控制正则化程度,适中即可
svc.fit(X_train, y_train) #训练支持向量机分类器
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 3.914299249649048 seconds
start = time.time()
train_score = svc.score(X_train, y_train)
test_score = svc.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.9948728904080325
Test score:0.9724447292534444
It is take 3.5872702598571777 seconds
from sklearn.naive_bayes import BernoulliNB #引入伯努利贝叶斯模型
start = time.time()
bernoulli_bayes = BernoulliNB()
bernoulli_bayes.fit(X_train, y_train) #训练伯努利贝叶斯模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 0.09700345993041992 seconds
start = time.time()
train_score = bernoulli_bayes.score(X_train, y_train)
test_score = bernoulli_bayes.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.913052766502884
Test score:0.9160525472604935
It is take 0.11000585556030273 seconds
from sklearn.tree import DecisionTreeClassifier #引入决策树模型
start = time.time()
decision_tree = DecisionTreeClassifier(max_depth=5) #设置决策树的最大深度为5,避免出现过拟合现象
decision_tree.fit(X_train, y_train) #训练多项式贝叶斯模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 1.640122652053833 seconds
start = time.time()
train_score = decision_tree.score(X_train, y_train)
test_score = decision_tree.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.9573809015167699
Test score:0.93784043575777
It is take 0.031012535095214844 seconds
from sklearn.ensemble import RandomForestClassifier #引入随机森林模型
start = time.time()
random_forest = RandomForestClassifier(n_estimators=100)
random_forest.fit(X_train, y_train) #训练随机森林模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 19.40948247909546 seconds
start = time.time()
train_score = random_forest.score(X_train, y_train)
test_score = random_forest.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:1.0
Test score:0.9615507850048062
It is take 0.35802292823791504 seconds
from sklearn.ensemble import GradientBoostingClassifier #引入梯度提升分类树模型
start = time.time()
gradient_boosting_tree = GradientBoostingClassifier()
gradient_boosting_tree.fit(X_train, y_train) #训练梯度提升分类树模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 307.464230298996 seconds
start = time.time()
train_score = gradient_boosting_tree.score(X_train, y_train)
test_score = gradient_boosting_tree.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.9818414868617816
Test score:0.9602691445049664
It is take 0.31026268005371094 seconds
from sklearn.neural_network import MLPClassifier #引入神经网络多层感知机模型
start = time.time()
mlp = MLPClassifier()
mlp.fit(X_train, y_train) #训练神经网络MLP多层感知机模型
end = time.time()
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
It is take 23.577603578567505 seconds
start = time.time()
train_score = mlp.score(X_train, y_train)
test_score = mlp.score(X_test, y_test)
end = time.time()
print('Train score:{}'.format(train_score))
print('Test score:{}'.format(test_score))
print('It is take {} seconds'.format(end-start)) #输出训练所需的时间
Train score:0.9900662251655629
Test score:0.975008010253124
It is take 0.07800674438476562 seconds
取出测试集中的100条测试数据,使用**支持向量机分类器(SVC)**进行评论预测,并输出结果
import random
dic_len = len(dictionary)
start = random.randint(100,2400)
#从测试集中随机抽取50条数据,准备测试
X_data = X_test[start:start+50]
y_data = y_test[start:start+50]
success_test = 0
#对 50 条评论信息进行预测
for sequence_index in range(len(X_data)):
#找到该评论在数组中的位置
loc = np.where((sentences_vector == X_data[sequence_index]).all(axis=1))
#输出该评论语句
print('/'.join(all_words[loc[0][0]]))
res = svc.predict([X_data[sequence_index]]) #使用支持向量机进行预测
#0 代表好评, 1代表差评
if res == '0':
print('Predict result : 好评', end='\t') #输出好评
else:
print('Predict result : 差评', end='\t') #否则输出差评
#实际该评论的结果
if y_data[sequence_index] == '0':
print('Actual results: 好评', end='\t')
else:
print('Actual results: 差评', end='\t')
#判断是否预测正确
if res == y_data[sequence_index]:
print('Predict success!', end='\t')
success_test += 1
else:
print('Predict fail!', end='\t')
print('\n\n')
print('本次测试预测准确度为: {}'.format(success_test/50))
学大/数据/大学/狗/听/有人/说/MacBook/适合/工科/买来/一段时间/感觉/还好/性能/很强/不愧/M1/ /Pro/没买/Max/版本/感觉/不到/32/核/GPU/16G/内存/我/够用/了/。
Predict result : 好评 Actual results: 好评 Predict success!
开机/划痕/心情/郁闷/提醒/这种/退换货/还是/官网/买
Predict result : 差评 Actual results: 差评 Predict success!
外形/外观/好看/ /选/颜色/对/屏幕/音效/屏幕/120hz/刷新/太爽了/ /用回/xr/真/卡/拍照/效果/拍照/清晰/运行/速度/速度/快/待机时间/玩/一把/游戏/掉电/ /续航/不错/,/其他/特色/充电/速度/快/ /23/分钟/37/ /真的/很快/了
Predict result : 好评 Actual results: 好评 Predict success!
完美/机/听筒/缝隙/屏幕显示/正常/拍照/重点/京东/发货/真的/太牛/超级/21/号/下单/已经/错过/前两天/抢购/情况/25/号/下午/收到/货/?/?/以为/好久/我/手机/壳/没/买/快递/员/打电话/知道/又/火速/京/东京/造买/了/手机/壳/没想到/壳/不错/。/我/仔细/看过/镜头/没有/灰尘/边框/没有/划痕/绝大多数/机子/没有/,/让/知道/都/有/发出/来显/的/问题/,/外形/外观/完美/,/拍照/效果/无敌/,/运行/速度/超级
Predict result : 好评 Actual results: 好评 Predict success!
买来/疫情/在家/办公/外观/时尚/大气/颜色/深/我心/自重/轻/出差/携带/发货/的/久/一点/但/值得/另外/,/小妹/导购/15/态度/很/好/,/赞/!
Predict result : 好评 Actual results: 好评 Predict success!
苹果/生产/技术/工艺/真的/太赞/熟悉/开机/声音/干脆/铝合金/打造/金属/机身/科技/感/十足/16/寸/大家伙/有点/重/但是/接受/毕竟/屏蔽/啊/运行/流畅/很棒/感觉/京东/物流/真的/,/快递/小哥/服务态度/很/不错/,
Predict result : 好评 Actual results: 好评 Predict success!
入手/打开/包装/很/惊艳/漂亮/看着/高级/安装/系统/简单/ /明/自带/OFF/运行/速度/超快/流畅/ /屏幕显示/超棒/不愧/大/品牌/,/爱/爱/!
Predict result : 好评 Actual results: 好评 Predict success!
京东/快递/送货/很快/艰难/条件/停运/收到/电脑/保证/不错/电脑/是/理想/华为/品牌/靠得住/~/一些/激活/注册/问题/不会/操作/,/问/客服/也/是/很/耐心/解答
Predict result : 好评 Actual results: 好评 Predict success!
运行/速度/开机/速度/特别/运行/流畅/运行/屏幕/效果/屏幕/清晰/视觉/舒适/散热/性能/用/几个/小时/发热/情况/风扇/静音/外形/外观/颜色/好看/商务/感强/上档次/轻薄/程度/厚度/合适/携带/轻便/其他/特色/隐形/摄像头/美观/,/指纹/解锁/便捷/华为/荣耀/手机/直连/文件/转移/,/触控/鼠标/快捷/功能/操作/很/方便/,/玩游戏/,/作为/办公/商务/电脑/值得/购买/,/性价比/超高
Predict result : 好评 Actual results: 好评 Predict success!
东北/暴雪/缘故/晚到/几天/但用/时候/手感/好/更加/人/欣慰/是/高频/分辨率/用/非常/舒适/不/电池/续航/怎么样/还/观望/中/希望/令人/失望
Predict result : 好评 Actual results: 好评 Predict success!
外观/好看/好看/颜值/爆表/开机/速度/很快/人脸识别/灵敏/屏幕/效果/很/清晰/大小/合适/电池/很/耐用/充电/速度/快/,/京东/快递/很/力
Predict result : 好评 Actual results: 好评 Predict success!
垃圾/都/不想/说/刚刚/拿到/可惜/发现/晚/自己/看吧/,/联网/不/退/,/一点/不好/垃圾/电脑
Predict result : 差评 Actual results: 差评 Predict success!
凌晨/付款/现在/拿到/货/迫不及待/开机/比/想象/要/薄/一点/屏幕/漂亮/宽/很窄/颜色/很/正/超级/爱/相信/品牌/,/质量/保证/下/一步/其他/配置/整齐/。
Predict result : 好评 Actual results: 好评 Predict success!
外形/外观/简单/大气/四方/边框/拿/很/舒适/屏幕/音效/拍照/清晰/防抖/性能/不错/运行/速度/运行/不卡顿/处理/流畅/待机时间/待机/时长/比较/优秀/充满/电/不/玩游戏/正常/6/小时
Predict result : 好评 Actual results: 好评 Predict success!
体验/感/不好/我/办公室/网络/办法/电脑/我/天天/热点/真是/方便/但是/店家/不/退货/这/不合理/这么/贵买/服务/太差/建议/买/在/外面/办事/网络/,/用/网络/不好/。
Predict result : 差评 Actual results: 差评 Predict success!
是/太棒了/我/喜欢/运行/速度/快/屏幕/效果/好/散热/性能/好
Predict result : 好评 Actual results: 好评 Predict success!
电脑/隔天/收到/快递/速度/很快/屏幕/90hz/效果/好/也/保护/眼睛/开机/秒/开/,/办公室/着/方便/,/整体/效果/好/这款/电脑
Predict result : 好评 Actual results: 好评 Predict success!
不错/手机/手感/好/方方正正/着/舒服/5g/速度/很快/幸好/以前/办/大/流量/卡/流量/还够用/系统/着/流畅/,/游戏/性能/好
Predict result : 好评 Actual results: 好评 Predict success!
电脑/毛病/多连个/蓝牙/磨磨/唧唧/一会/好使/一会/不好/千万别/入坑
Predict result : 差评 Actual results: 差评 Predict success!
屏幕/效果/非常/运行/速度/?/外形/外观/好看/其他/特色/音响/不错/我/很/爱/大家/这部/不用/犹豫/,/冲/!
Predict result : 好评 Actual results: 好评 Predict success!
电脑/价格/10/天降/两次/申请/保价/说/了/保价/期/,/明明/说/是/保价/一个月/,/给/说/周期
Predict result : 差评 Actual results: 差评 Predict success!
窄/宽/加持/ /16/mac/ /整体/尺寸/上/一代/无/变化/ /争议/刘海/屏/实际/mac/系统/运行/无/影响/ /系统/工具栏/专属/位/ /复古/方正/设计/ /了/稳重/气息/ /就/符合/这代/pro/整体/定位/ / /历代/最强/芯/最强/屏/最强/扬声/系统/足够/震撼/ /回归/磁吸/ /多/拓展/接口/是/惊喜/满满/想要/换新/这代/真的/不用/了/ /体验/感拉满
Predict result : 好评 Actual results: 好评 Predict success!
运行/速度/很快/外形/外观/很/好看
Predict result : 好评 Actual results: 好评 Predict success!
在/买/活动/时候/价格/美丽/发货/速度/贼/质量/不错/应该/正品/挺/和/想象/中/随意/搭/好看/满意/每/都/很/满意/,/这次/选/的/宝贝/满意/,/以后/还会/一如既往/地买/包装/,/物流/,/价格/实惠/,/散热/挺/,/风扇/声/还行
Predict result : 好评 Actual results: 好评 Predict success!
买来/上网/课用/电脑/不错/噢/而且/到货/不/熟悉/11/系统/不会/就/问/导购/37/小姐姐/,/她/耐心/解答/好/喔
Predict result : 好评 Actual results: 好评 Predict success!
品控/之差/屏幕/三个/暗点/坏点/人脸/解锁/几次/正常/识别/换货/等于/抽奖/315
Predict result : 差评 Actual results: 差评 Predict success!
轻薄/程度/轻薄/外形/外观/非常/好看/高级/屏幕/效果/显色/很/好/散热/性能/散热/发热/其他/特色/快递/物流/疫情/不/因素/很快/快递/疫情/原因/滞留/10/天/,/今天/到/,/包装/还是/很/不错/的/。
Predict result : 好评 Actual results: 好评 Predict success!
运行/速度/5/秒/开机/爆赞/屏幕/效果/高色域/无色差/散热/性能/非常/静音/整机/散热
Predict result : 差评 Actual results: 好评 Predict fail!
差评/差评/差评/差评/差评/刚/拿来/有/黑屏/电视剧/屏幕/就/花掉
Predict result : 差评 Actual results: 差评 Predict success!
运行/速度/感觉/很快/日常/完全/问题/屏幕/效果/屏幕/流畅/非常/清晰/颜色/正/,/外形/外观/好看/,/轻薄/程度/轻薄
Predict result : 好评 Actual results: 好评 Predict success!
对比/买下/这款/轻薄/16.1/寸/屏幕/看着/舒服/平时/做作业/,/办公/,/性能/足够/,/银色/高级/,/还/继续/探索/中
Predict result : 好评 Actual results: 好评 Predict success!
纠结/好久/选/这个/颜色/不/沾/指纹/大小/合适/外观设计/精美/拍摄/效果/好/运行/速度/待机时间/长/,/屏幕/清晰度/高/,/手感/好
Predict result : 好评 Actual results: 好评 Predict success!
手机/充电/头/自己/配
Predict result : 差评 Actual results: 差评 Predict success!
买/还/几天/掉价儿/还/保价/强烈/差评
Predict result : 差评 Actual results: 差评 Predict success!
垃圾/东西/就/几天/时间/降/700/块钱/保价/服务/没用/慎买
Predict result : 差评 Actual results: 差评 Predict success!
隔天/收到/电脑/ /喜欢/ /朋友/推荐/买/华为/笔记本/ /是/了/好几年/说好/ /轻薄/小巧/ /携带/ /运行/速度/快/ /喜欢
Predict result : 好评 Actual results: 好评 Predict success!
好/便携/电脑/尺寸/配置/很强/独立/显卡/荣耀/几年/产品设计/越来越/特点/!/家人/后/反馈/好/系统/很/流畅/,/十分/推荐
Predict result : 好评 Actual results: 好评 Predict success!
到手/惊艳/ /这块/屏幕/确实/不错/ /显示/效果/很/细腻/ /1080p/16/寸大屏/确实/逐渐/淘汰/ /在/自带/管家/调/色调/ /对比度/ /也/很/ /一个/贴心/小/功能/ /开盖/开机/ /很/ /实测/七八次/样子/ /挺/灵敏/ /多/的/东西/ /慢慢/测好
Predict result : 好评 Actual results: 好评 Predict success!
收到/笔记本/特意/了/三天/评价/感觉/整体/很/不错/速度/静音/易上/手/操作/只是/包裹/外包装/破损/,/以后/注意/,/笔记本/内包装/完好/,/推荐/购买
Predict result : 好评 Actual results: 好评 Predict success!
登录/WIFI/显示/密码/错误/同/密码/家里/两部/华为/手机/可以/登录/WIFI/申请/售后/换货/售后/说/帮/调试/,/拿到/手机/试用/登录/WIFI/密码/错误
Predict result : 差评 Actual results: 差评 Predict success!
感谢/服务/那么/电脑/下来/反应速度/快/我/买/游戏/本作/做/文职/的/工作/,/来看/是/问题/了/,/谢谢/,/谢谢/的/。
Predict result : 好评 Actual results: 好评 Predict success!
粉红色/外观/电脑/颜值/挺/高/运行/速度/很快/没有/声音/散热/性能/好/,/价格/优惠
Predict result : 好评 Actual results: 好评 Predict success!
开机/速度慢/花头/精/多
Predict result : 差评 Actual results: 差评 Predict success!
电脑/喜欢/想象/中/一样/简单/大方/轻薄/办公/够用/运行/速度/,/到货/后用/才/评价/,/小巧玲珑/,/静谧/银/好看
Predict result : 好评 Actual results: 好评 Predict success!
商品/发烫/退货/检修/原机/退回/,
Predict result : 差评 Actual results: 差评 Predict success!
运行/速度/很快/ /不卡/流畅/屏幕/效果/分辨率/高/散热/性能/很/,/外形/外观/很/简约/大气
Predict result : 好评 Actual results: 好评 Predict success!
超级/轻薄/外观/满分/性价比/极高/值得/推荐/运行/速度/非常/!/屏幕/效果/非常/清晰/散热/性能/非常/,/外形/外观/外观/10/颗星/,/轻薄/程度/非常/轻薄
Predict result : 好评 Actual results: 好评 Predict success!
不好/ /屏幕/一点/不灵敏
Predict result : 差评 Actual results: 差评 Predict success!
没用过/贵/笔记本/苹果/笔记本/很/精致
Predict result : 好评 Actual results: 好评 Predict success!
颜色/漂亮/存储空间/足够/处理器/速度/满足/需求/发货/速度/很快/满意/,/推荐/购买/上班族/足够/,/打游戏/可以/,/速度/杠杠/滴
Predict result : 好评 Actual results: 好评 Predict success!
本次测试预测准确度为: 0.98
可见,支持向量机模型对结果的预测准确度达到98%,也较为不错
前提,评论文本信息已经完成一系列的预处理操作,如
现在列举各机器学习模型对于评论情感分析的性能(训练数据13499 条)
模型名称 | 训练耗时 | 测试耗时 | 训练集预测精度 | 测试集预测精度 |
---|---|---|---|---|
KNN模型 | 0.01401s | 4.13731s | 96.3% | 94.9% |
逻辑回归模型 | 1.50311s | 0.03201s | 96.8% | 96.2% |
支持向量机模型 | 3.91430s | 3.58727s | 99.5% | 97.2% |
伯努利贝叶斯模型 | 0.09700s | 0.11001s | 91.3% | 91.6% |
决策树模型 | 1.64012s | 0.03101s | 95.7% | 93.8% |
随机森林模型 | 19.40948s | 0.35802s | 100% | 96.2% |
梯度提升分类树模型 | 307.46423s | 0.31026s | 98.2% | 96.0% |
神经网络MLP多层感知器模型 | 23.57760s | 0.07800 | 99.0% | 97.5% |
本次统计测试结果不一定完全准确,因为没有涉及到细节的调参问题或者数据缩放问题
尤其是随机森林模型,过拟合较为严重,后续若有新的学习进展,会陆续更新改进,若有小伙伴们有疑问或指导,欢迎下方留言