对于一个简单的文本情感分类来说,其实就是一个二分类,这篇博客主要讲述的是使用scikit-learn来做文本情感分类。分类主要分为两步:1)训练,主要根据训练集来学习分类模型的规则。2)分类,先用已知的测试集评估分类的准确率等,如果效果还可以,那么该模型对无标注的待测样本进行预测。

首先先介绍下我样本集,样本是已经分好词的酒店评论,第一列为标签,第二列为评论,前半部分为积极评论,后半部分为消极评论,格式如下:

下面实现了SVM,NB,逻辑回归,决策树,逻辑森林,KNN 等几种分类方法,主要代码如下:

#coding:utf-8

from matplotlib import pyplot

import scipy as sp

import numpy as np

from sklearn.cross_validation import train_test_split

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.metrics import precision_recall_curve

from sklearn.metrics import classification_report

from numpy import *

#========SVM========#

def SvmClass(x_train, y_train):

from sklearn.svm import SVC

#调分类器

clf = SVC(kernel = 'linear',probability=True)#default with 'rbf'

clf.fit(x_train, y_train)#训练,对于监督模型来说是 fit(X, y),对于非监督模型是 fit(X)

return clf

#=====NB=========#

def NbClass(x_train, y_train):

from sklearn.naive_bayes import MultinomialNB

clf=MultinomialNB(alpha=0.01).fit(x_train, y_train)

return clf

#========Logistic Regression========#

def LogisticClass(x_train, y_train):

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(penalty='l2')

clf.fit(x_train, y_train)

return clf

#========KNN========#

def KnnClass(x_train,y_train):

from sklearn.neighbors import KNeighborsClassifier

clf=KNeighborsClassifier()

clf.fit(x_train,y_train)

return clf

#========Decision Tree ========#

def DccisionClass(x_train,y_train):

from sklearn import tree

clf=tree.DecisionTreeClassifier()

clf.fit(x_train,y_train)

return clf

#========Random Forest Classifier ========#

def random_forest_class(x_train,y_train):

from sklearn.ensemble import RandomForestClassifier

clf= RandomForestClassifier(n_estimators=8)#参数n_estimators设置弱分类器的数量

clf.fit(x_train,y_train)

return clf

#========准确率召回率 ========#

def Precision(clf):

doc_class_predicted = clf.predict(x_test)

print(np.mean(doc_class_predicted == y_test))#预测结果和真实标签

#准确率与召回率

precision, recall, thresholds = precision_recall_curve(y_test, clf.predict(x_test))

answer = clf.predict_proba(x_test)[:,1]

report = answer > 0.5

print(classification_report(y_test, report, target_names = ['neg', 'pos']))

print("--------------------")

from sklearn.metrics import accuracy_score

print('准确率: %.2f' % accuracy_score(y_test, doc_class_predicted))

if __name__ == '__main__':

data=[]

labels=[]

with open ("train2.txt","r")as file:

for line in file:

line=line[0:1]

labels.append(line)

with open("train2.txt","r")as file:

for line in file:

line=line[1:]

data.append(line)

x=np.array(data)

labels=np.array(labels)

labels=[int (i)for i in labels]

movie_target=labels

#转换成空间向量

count_vec = TfidfVectorizer(binary = False)

#加载数据集,切分数据集80%训练,20%测试

x_train, x_test, y_train, y_test= train_test_split(x, movie_target, test_size = 0.2)

x_train = count_vec.fit_transform(x_train)

x_test = count_vec.transform(x_test)

print('**************支持向量机************ ')

Precision(SvmClass(x_train, y_train))

print('**************朴素贝叶斯************ ')

Precision(NbClass(x_train, y_train))

print('**************最近邻KNN************ ')

Precision(KnnClass(x_train,y_train))

print('**************逻辑回归************ ')

Precision(LogisticClass(x_train, y_train))

print('**************决策树************ ')

Precision(DccisionClass(x_train,y_train))

print('**************逻辑森林************ ')

Precision(random_forest_class(x_train,y_train))

结果如下:

对于整体代码和语料的下载,可以去下载

python 多分类情感_python 文本情感分类相关推荐

  1. 如何用Python和BERT做中文文本二元分类?| 程序员硬核评测

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 作者 | 王树义 来源 | 王树芝兰(ID:nkwangshuyi) 兴奋 去年, Google 的 B ...

  2. python 多分类情感_文本情感分类(一):传统模型

    前言:四五月份的时候,我参加了两个数据挖掘相关的竞赛,分别是物电学院举办的"亮剑杯",以及第三届 "泰迪杯"全国大学生数据挖掘竞赛.很碰巧的是,两个比赛中,都有 ...

  3. 基于Python实现的论坛帖子文本情感分析完整代码+数据 可直接运行 毕业设计

    完整代码:https://download.csdn.net/download/qq_38735017/87425721 一.课程项目 文本分类分析 二.项目类容 爬取川大匿名社区SCUinfo在一段 ...

  4. 使用python和sklearn的中文文本多分类实战开发

    文本分类一般可以分为二分类.多分类.多标签分类三种情况,二分类是指将一组文本分成两个类(0或1),比较常见的应用如垃圾邮件分类.电商网站的用户评价数据的正负面分类等,多分类是指将文本分成若干个类中的某 ...

  5. python+word2vec+随机森林 微博文本情感极性分析(一)

    数据源:36万条微博文本,已标注情感.源数据中label0:开心,label1-3:低落或忧伤.本文只考虑情感正负极性,所以1-3都划为负样本. 项目思路:分词后利用gensim.models.wor ...

  6. python snownlp评论分析_python snownlp情感分析简易demo

    SnowNLP是国人开发的python类库,能够方便的处理中文文本内容,是受到了TextBlob的启发而写的,因为如今大部分的天然语言处理库基本都是针对英文的,因而写了一个方便处理中文的类库,而且和T ...

  7. python分类预测_python做logistic分类预测尝试

    首先需要明确一点是logistics回归和线性回归的区别: 1线性回归的因变量Y是连续性变量,而logistics回归是分类变量. 2线性回归最后可以通过函数y=a1x1+a2x2...去描述,而lo ...

  8. python决策树分类案例_python实现决策树分类算法

    本文实例为大家分享了python实现决策树分类算法的具体代码,供大家参考,具体内容如下 1.概述 决策树(decision tree)--是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于 ...

  9. python分箱代码_python实现二分类的卡方分箱示例

    解决的问题: 1.实现了二分类的卡方分箱: 2.实现了最大分组限定停止条件,和最小阈值限定停止条件: 问题,还不太清楚,后续补充. 1.自由度k,如何来确定,卡方阈值的自由度为 分箱数-1,显著性水平 ...

最新文章

  1. 大唐联仪推出下一代移动通信测试解决方案
  2. poj2305-Basic remains(进制转换 + 大整数取模)
  3. WebRTC Audio 接收和发送的关键过程
  4. excel怎么启用宏_EXCEL制作的小升初毕业生登记表,全自动填充,包括照片
  5. 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
  6. 矩阵求多元函数的通解_Hessian矩阵
  7. Linux系统瘦身裁剪 续
  8. Spring中Singleton作用域和Prototype作用域
  9. 清除浮动的最佳方案:clearfix
  10. C#LeetCode刷题之#263-丑数(Ugly Number)
  11. java连接mysql url_java连接数据库URL
  12. C++ 使用其它文件的类
  13. airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
  14. 一册在手,走遍天下(大数据技术架构手册之上篇十四万字问世)
  15. 计算机专业该如何学习:准大一篇
  16. 有了ElasticSearch为什么还要用MySQL?-这篇文章告诉你
  17. linux 内核调试 booting the kernel.,Linux无法启动解决 booting the kernel.
  18. 数据监控难点之实时监测
  19. 异常处理:.net.UnknownHostException nodename nor servname provided, or not known
  20. linux登陆操作mysql

热门文章

  1. 使用 docker 部署常用的开发环境
  2. .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿
  3. django22:复制网页与css/时区设置
  4. 最近无埋点技术很是流行,抽空研究了下诸葛IO,talkingData以及百分点这些业内知名公司的无埋点SDK,抽取其中重要的信息供大家参考:
  5. ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程
  6. 【经典回放】多种语言系列数据结构线性表之二:链表
  7. Flutter之导url_launcher包提示 A dependency may only have one source.
  8. open ssl里面的自定义get***函数失效
  9. Android之获取证书文件(pfx格式)的公钥和私钥
  10. Android之AIDL使用详解