文本分类的14种算法(1):

前期的数据处理及算法的评价指标选取

训练集和测试集采用了 上一篇文章中的数据集:
https://blog.csdn.net/qq_43012160/article/details/94664377

import、from…import、import…as的区别

import就是导入整个包,使用包里的类或者函数需要把包名也写上。
from…import则是导入包里某个特定的类或者函数,用的时候可以像自定义函数一样直接用。
import…as就是有时候包的名字太长了,给他取个别名。

import pandas as pd
import time
from sklearn import metrics
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.neural_network import MLPClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

数据标签的规格化

LabelEncode类的fit_transform函数可以将标签规格化为自然数,例如有标签“好”、“坏”、“牛皮”,
就可以把“好”变成1,“坏”变成2,“牛皮”变成0,大概这么个意思。其中fit_transform由fit和transform两个过程组成,fit过程类似于学习,学习所有的标签;transform类似规格化,把不同的标签转化为不同的自然数标记,数据标准化方便算法的标准化处理:

train_data = pd.read_csv('mytrain.csv', lineterminator='\n')
test_data=pd.read_csv('testCSV.csv', lineterminator='\n')#利用LabelEncoder对数据标签进行规格化处理
def encodeLabel(data):listLable=[]for lable in data['lable']:listLable.append(lable)#到这里都是把lable整合到一起,下面是规格化处理le = LabelEncoder()resultLable=le.fit_transform(listLable)return resultLabletrainLable=encodeLabel(train_data)
testLable=encodeLabel(test_data)

由于我的训练集和测试集特征和标签是放在一起的,分别放在review字段和lable字段里,所以要把他们拿出来集合处理一下,数据特征review的处理放在下面:
#这里出来是所有review的集合:

def getReview(data):listReview=[]le = LabelEncoder()for review in data['review']:listReview.append(review)return listReviewtrainReview=getReview(train_data)
testReview=getReview(test_data)

数据标签的规格化

CountVectorizer类可以对特征数据进行特征提取,可以将文本信息转化为对应的特征向量。其中stop_words属性代表着无效词:在实际场景中诸如标点和数字往往是不能作为可靠的文本分类依据的,这就属于无效词,需要在统计时剔除。wordBag包含了训练集和测试集的所有特征,利用cv.fit(wordBag)可以对wordBag的所有分词(即训练集和测试集的词袋)进行学习,之后用 transform方法构建每个样例的频数特征向量,但由于 transform方法构造出的向量以稀疏矩阵的形式存储,故还要使用toarray进行转换。

#这里出来是频数向量:
stoplist=['.', '?', '!', ':', '-', '+', '/', '"', ',','0','1','2','3','4','5','6','7','8','9','0']
cv=CountVectorizer(stop_words=stoplist)
wordBag=trainReview+testReview
cv.fit(wordBag)
test_count = cv.transform(testReview)
testCount = test_count.toarray()
train_count = cv.transform(trainReview)
trainCount = train_count.toarray()

算法的调用与评测

这里将算法的评测与调用集成在一个函数里,以伯努利贝叶斯算法为例:

def classificate(estimator, trainReview, trainLable, testReview, testLable):start = time.time()#模型训练,fit通常都是指模型的学习、训练过程print('训练:')model = estimatormodel.fit(trainReview, trainLable)print(model)#模型预测:print('预测:')pred_model = model.predict(testReview)print(pred_model)#算法评估print('评估:')score = metrics.accuracy_score(testLable, pred_model)matrix = metrics.confusion_matrix(testLable, pred_model)report = metrics.classification_report(testLable, pred_model)print('>>>准确率\n', score)print('\n>>>混淆矩阵\n', matrix)print('\n>>>召回率\n', report)end = time.time()t = end - startprint('\n>>>算法消耗时间为:', t, '秒\n')#算法调用:
knc = BernoulliNB()
classificate(knc, trainCount, trainLable, testCount, testLable)

混淆矩阵百度百科讲的挺清楚的:https://baike.baidu.com/item/混淆矩阵/10087822?fr=aladdin
召回率表达的和混淆矩阵差不多,假定:从一个大规模数据集合中检索文档时,可把文档分成四组:

  • 系统检索到的相关文档(A)
  • 系统检索到的不相关文档(B)
  • 相关但是系统没有检索到的文档(C)
  • 不相关且没有被系统检索到的文档(D)
    则召回率R为:用实际检索到相关文档数作为分子,所有相关文档总数作为分母,即R = A / ( A + C )

下一篇文章将具体介绍例如伯努利贝叶斯的14种文本分类的常用算法。

文本分类的14种算法(1)相关推荐

  1. 文本分类的14种算法总结

    文本分类的14种算法总结 之前介绍了14种文本分类中的常用算法,包括8种传统算法:k临近.决策树.多层感知器.朴素贝叶斯(包括伯努利贝叶斯.高斯贝叶斯和多项式贝叶斯).逻辑回归和支持向量机:4种集成学 ...

  2. 文本分类的14种算法(2)

    文本分类的14种算法(2): 部分常用文本分类算法 决策树 决策树从根结点开始,根据待分类数据的某一特征的取值对其进行划分,分配到相应子结点.像这样递归进行,直到到达叶结点.那么如何判定最优特征呢? ...

  3. 文本分类的14种算法(3)

    文本分类的14种算法(3): 部分常用文本分类算法 k临近算法 所谓临近,就是指对于测试样本,找出训练集中与他最相似的一个样本,并将该样本的结果当作测试样本的结果输出.k临近算法利用"距离& ...

  4. 文本分类的14种算法

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 之前介绍了14种文本分类中的常用算法,包括8种传统算法:k临近.决策树.多层感知器.朴素贝叶斯 ...

  5. 文本分类和提取关键词算法_文本内容之间的关键词提取和相似度计算

    文本分类和提取关键词算法 背景 Web应用程序变得越来越智能. 从网站上使用服务的日子已经一去不复返了,用户不得不填写一个巨大的表格. 假设您有一个适合书迷的网站. 在Web 2.0之前,像这样的网站 ...

  6. 总结2021面试中的常见14种算法套路

    ‍‍‍ 点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器学习爱好者社区 编辑丨极市平台 导读 曾在 Fac ...

  7. 文本分类之特征简约算法说明

    见 http://blog.csdn.net/aalbertini/archive/2010/07/20/5749883.aspx 用数值衡量某个特征的重要性. 1 df: 用df衡量重要性. df就 ...

  8. 文本分类的一种对抗训练方法

    最近阅读了有关文本分类的文章,其中有一篇名为<Adversarail Training for Semi-supervised Text Classification>, 其主要思路实在文 ...

  9. Python文本分类(不涉及算法)

    Python文本分类 ** 首先下载安装,用到的库有pandas和jieba库 这个文本分类很简单,并不涉及算法 ** 源数据是二个excel文件,大约7000条数据,首先把二个文件进行合并成一个DF ...

最新文章

  1. WICC上了全球很多家交易所,它是一种资产和流动性的代表
  2. 错误: (串列)对象不能强制改变成'double'解决办法
  3. System x迈向更多领域 国内超算步入全面发展时代
  4. 安装百分之80卡住_石家庄铜铝80*80散热器品牌
  5. java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...
  6. MONGODB 集群架构 调整,增加延迟备份节点服务器,删除仲裁节点
  7. php迭代器作用,PHP迭代器介绍
  8. 同学,要开学了,你的导师也很焦虑
  9. leetcode —— 75. 颜色分类
  10. Python多重继承时属性的调用顺序
  11. 这个世界上有一个故事,叫做《大话西游》。
  12. 重载操作符解析(原)
  13. rocketmq稳定可靠性测试
  14. linux 下拉式 终端,Gnome桌面的下拉式终端: Guake
  15. PreScan、Carsim、Carmaker和VTD联合仿真
  16. 2010nbsp;贱语大全!
  17. 让新股抢跑 -- 富途证券上线港股暗盘交易功能
  18. 《北京DRGs系统的研究与应用》学习笔记
  19. Excel教程:规范Excel表格设计,让工作效率提升百倍不止
  20. USB研究(二)U盘驱动前的初始化

热门文章

  1. C++的errorC2039
  2. 把maven的setting配置文件改为需要jdk版本
  3. [渝粤教育] 西南科技大学 特用经济作物栽培技术 在线考试复习资料
  4. ExecutorService 接口学习
  5. 深度学习——Dual Regression Networks for Single Image Super-Resolution(DRN)
  6. Learning with Errors
  7. Mac电脑系统降级至10.15 Catalina(2020末代intel)
  8. 信息增益,信息增益率,Gini
  9. axios中的拦截器
  10. 906.nethogs安装使用