使用TF-IDF模型,结合机器学习进行情感分类,能取得较好的准确率。

本文的JupyterNotebook可参考这里。

本文介绍NLP的通用方法TF-IDF的使用,并且分类准确率能达到0.95,进入kaggle排行榜的前100。

TF-IDF

TF-IDF(词频-逆文档频率)算法是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

其计算方法比较简单,这里就不赘述了。本文使用sklearn中的TfidfVectorizer进行处理。

from sklearn.feature_extraction.text import TfidfVectorizer as TFIV
tfv = TFIV(min_df=3,  max_features=None, strip_accents='unicode', analyzer='word',token_pattern=r'\w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1,stop_words = 'english')

这里可以设置的参数为n-gram,本文经过试验,当n为3或者4时表现良好。

数据清理和预处理的步骤与上一篇博文相似,再此不赘述。

将数据带入进行训练:

X_all = traindata + testdata # Combine both to fit the TFIDF vectorization.
lentrain = len(traindata)tfv.fit(X_all) # This is the slow part!
X_all = tfv.transform(X_all)X = X_all[:lentrain] # Separate back into training and test sets.
X_test = X_all[lentrain:]

机器学习

Logistic Regression

首先使用简单的逻辑回归看看向量化的结果如何,这里使用了GridSearchCV进行超参数选择:

grid_values = {'C':[30]} # Decide which settings you want for the grid search. model_LR = GridSearchCV(LR(penalty = 'L2', dual = True, random_state = 0), grid_values, scoring = 'roc_auc', cv = 20)
# Try to set the scoring on what the contest is asking for.
# The contest says scoring is for area under the ROC curve, so use this.model_LR.fit(X,y_train) # Fit the model.

使用model_LR.grid_scores_打印训练集上的结果,出乎意料的是,在训练集上的准确率达到了0.96459!

MultinomialNB

使用朴素贝叶斯进行训练:

from  sklearn.naive_bayessklearn.  import MultinomialNB as MNB
from sklearn.cross_validation import cross_val_score
import numpy as np
model_NB = MNB()
model_NB.fit(X, y_train)
print "20 Fold CV Score for Multinomial Naive Bayes: ", np.mean(cross_val_score                                                                (model_NB, X, y_train, cv=20, scoring='roc_auc'))# This will give us a 20-fold cross validation score that looks at ROC_AUC so we can compare with Logistic Regression.

使用20折交叉验证,在训练集上的准确率达到了0.94963。

SGD

使用SGD进行训练,该模型使用于大数据集,考虑到我们使用n=3 的TF-IDF模型时,向量维数已经达到了309798,因此此方法也许能更快的找到极值点:

from  sklearn.linear_modelsklearn.  import SGDClassifier as SGD
sgd_params = {'alpha': [0.00006, 0.00007, 0.00008, 0.0001, 0.0005]} # Regularization parametermodel_SGD = GridSearchCV(SGD(random_state = 0, shuffle = True, loss = 'modified_huber'), sgd_params, scoring = 'roc_auc', cv = 20) # Find out which regularization parameter works the best. model_SGD.fit(X, y_train) # Fit the model.

训练集上的准确率已经达到了0.96477!对于如此简单的分类算法,这已经相当不错了。说明使用TF-IDF模型能很好的模拟数据集,而更高大上的Doc2Vec或者Word2Vec则拟合较差。

基于IMDb数据集的情感分析(TF-IDF与机器学习实现)相关推荐

  1. 基于IMDB评论数据集的情感分析

    文章目录 前言 一.大型电影评论数据集介绍 二.环境配置 三.实验模型及流程 1.实验模型 2.实验流程 四.实验代码 1.多层感知器模型代码 2.递归神经网络模型代码 3.长短期记忆模型代码 五.实 ...

  2. 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  3. IMDB影评的情感分析任务:双层bi-LSTM模型(双向LSTM)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) IMDB影评的情感分析任务 学习目标 了解影评情感分析任务和I ...

  4. 基于AdaBoost算法的情感分析研究

    源码下载 http://www.byamd.xyz/hui-zong-1/ 基于AdaBoost算法的情感分析研究 摘 要 随着互联网的快速发展,各类社交媒体平台如微信.QQ等也与日俱增,而微博更是集 ...

  5. 综述:基于深度学习的情感分析

    近年来,深度学习有了突破性发展,NLP 领域里的情感分析任务逐渐引入了这种方法,并形成了很多业内最佳结果.本文中,来自领英与伊利诺伊大学芝加哥分校的研究人员对基于深度学习的情感分析研究进行了详细论述. ...

  6. 基于itchat的个人情感分析

    基于itchat的个人情感分析 昝道广 概述 前言 思考 性别分析 好友签名情感分析 地区分布 爬虫技术分析 代码解析(部分) 后记 前言 本文以迅雷不及掩耳盗铃儿响叮当机立断章取义无反顾,雄姿英发, ...

  7. 机器学习基于语义特征的情感分析

    基于语义特征的情感分析先人已有研究,可以通过情感词典匹配来做,但是应用机器学习在这方面会使精确度更高些. 以本人参与的一个项目为主,总结下相关技术点. 背景是:分析用户评论感情色彩是积极还是消极,即是 ...

  8. 基于词典的细粒度情感分析

    1 细粒度情感分析 传统的情感分析大多是针对句子级的,即某条评论或某句话为积极或消极的概率.而往往一句话中包含着多个描述点,即方面级的述评,这时用一个模糊的概率或数字去评价整段文字或整句话势必是不准确 ...

  9. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  10. python微博文本分析_基于Python的微博情感分析系统设计

    基于 Python 的微博情感分析系统设计 王欣 ; 周文龙 [期刊名称] < <信息与电脑> > [年 ( 卷 ), 期] 2019(000)006 [摘要] 微博是当今公众 ...

最新文章

  1. 单域名多php,php多域名单站点路由
  2. 【Python】刚刚,Python3.10 正式发布了!终于增加了这个功能...
  3. C/C++语言变量声明内存分配
  4. Java UnknownHostException –服务器的无效主机名–如何解决?
  5. golang实现聊天室(一)
  6. Ace教你一步一步做Android新闻客户端(三) JSON数据解析
  7. 云计算实战系列六(Linux进程管理)
  8. vmware-tools安装失败
  9. Wireshark和TcpDump抓包分析心得
  10. 知名互联网公司系统架构图[第2期]
  11. 《Go程序设计语言》- 第1章:入门
  12. 基于UML的人事管理系统
  13. python进制转换问题“输入十进制整数和欲转换的进制数r,将十进制转换为r进制数(r>=2)”
  14. 武汉互联网公司和生活成本
  15. m132nw与m132snw差异_最新评测揭秘m132nw与m132snw差异哪个好?各个型号有什么区别?用户实话实说...
  16. 智慧政务说明书 督察督办(八)
  17. 铁矿石加速下跌,沪铜认购大涨,甲醇09-01季节性反套2022.4.22
  18. 实验六 配置GVRP协议
  19. 简洁但功能强大的EditPlus
  20. 对window的注册表进行优化

热门文章

  1. 第13期 《仰望星空,脚踏实地》 12月刊
  2. 一句话,连上隔壁老王家的 WiFi !
  3. 一文读懂自然语言处理NLP(图解+学习资料)
  4. 示波器的 带宽 采样率 存储深度
  5. VMware 安装失败failed to install the hcmon driver (win10)
  6. 关于数据库系统的查询处理
  7. Bootstrap下拉单选框,下拉搜索多选框Bootstrap-select
  8. 视频编解码(一):ffmpeg编码H.264帧类型判断
  9. 走火入魔的macfans,披着mac皮的ubuntu macbuntu安装指南
  10. Oracle 软件包及补丁包免费下载及简单说明