基于机器学习的文本情感分析算法研究
课程设计报告
概述:
本次实验通过多种不同算法实现文本情感分析,并比较不同算法的准确率,选取最佳的算法。
(这篇实验报告如果和手写数字分析那一篇雷同……没错就是ctrl+c和ctrl+v的功劳)
数据来源
数据来源于https://zhuanlan.zhihu.com/p/80029681
存放于data/waimai_10k.csv中
其实之前用爬虫爬了不少数据,但是……都没有标签,手动打标签的话我可能会累死……
(而且别人的数据不仅仅可以白嫖,还不用做数据清洗)
数据处理
肯定要先读取的嘛,还有向量化
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
data = pd.read_csv("data/waimai_10k.csv")
review=data['review'].values
label=data['label'].values
vectorizer = TfidfVectorizer(encoding='latin-1')
corp = vectorizer.fit_transform((d for d in review))
train_X, test_X, train_y, test_y = train_test_split(corp, label, test_size=0.20, random_state=24);
算法的原理:
逻辑回归:
原理:
Logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
Logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
代码实现:
from sklearn.linear_model import LogisticRegression
LJHG_model = LogisticRegression(max_iter=3000)
LJHG_model.fit(train_X, train_y)
LJHG = LJHG_model.score(test_X, test_y)
朴素贝叶斯算法:
原理:
朴素贝叶斯(Naive Bayesian)算法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。
代码实现:
from sklearn.naive_bayes import BernoulliNB
PSBYS_model = BernoulliNB()
PSBYS_model.fit(train_X, train_y)
PSBYS = PSBYS_model.score(test_X, test_y)
KNN:
原理:
KNN(K- Nearest Neighbor)法即K最邻近法,最初由 Cover和Hart于1968年提出,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路非常简单直观:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
分析:
由于K的值对结果有影响,所以可以先确定K的值来提升准确率
from sklearn.neighbors import KNeighborsClassifier
ns = range(1, 50)
acc_list = []
n_max = 0
for n in ns:
KNN_model = KNeighborsClassifier(n_neighbors=n)
KNN_model.fit(train_X, train_y)
acc = KNN_model.score(test_X, test_y)
acc_list.append(acc)
x = max(acc_list)
n_max = acc_list.index(x)+1
将K的值范围确定为1到49,依次实验并作图:
由图得,当K取5的时候准确率最高
代码实现:
from sklearn.neighbors import KNeighborsClassifier
n = 5
KNN_model = KNeighborsClassifier(n_neighbors=n)
KNN_model.fit(train_X, train_y)
KNN = KNN_model.score(test_X, test_y)
不同算法的比较:
由不同的算法得出准确率,并作图
结论:
由三种不同算法的比较图可得:逻辑回归,朴素贝叶斯和KNN算法的准确率都达到了50%以上。其中KNN算法的准确率最高,达到了80%以上。
KNN算法准确率较高的原因是找到了较好的K值,其他算法也可以通过调整参数的值来提高准确率。所以,人工智能现阶段最主要的还是人工调参(又回想起了数学建模大赛时被各种参数支配的恐惧)。
3 条评论
图怎么画的? 怎么没生成图
要生成什么图阿?
图我画好了 谢谢你 很不错的文章!