数据集链接:
http://qwone.com/~jason/20Newsgroups/
(比较慢,建议Science上网)
当然这里用不到这个数据集,sklearn导入会自动下载,倘若比较慢,可参考:
sklearn.datasets.fetch_20newsgroups的下载速度极慢采用离线下载导入
等别的方法
具体实践中,稍等了一会儿就好了的。
sklearn自带数据集datasets,划分好训练集和测试集了。
from sklearn.datasets import fetch_20newsgroups
最开始,参考于这篇博客:
使用sklearn和tf-idf变换的针对20Newsgroup数据集做文本分类
打算通过函数调用的方式来划分清楚各个分类方法:
def SGD():
from sklearn.linear_model.stochastic_gradient import SGDClassifier
return SGDClassifier()
def MultinomialNB():
from sklearn.naive_bayes import MultinomialNB
return MultinomialNB()
def LogisticRegression():
from sklearn.linear_model import LogisticRegression
return LogisticRegression()
def Svm(train_x, train_y):
from sklearn.svm import SVC
return SVC()
def Knn(train_x, train_y):
from sklearn.neighbors import KNeighborsClassifier
return KNeighborsClassifier()
def RandomForest(train_x, train_y):
from sklearn.ensemble import RandomForestClassifier
return RandomForestClassifier()
def DecisionTree(train_x, train_y):
from sklearn.tree import DecisionTreeClassifier
return DecisionTreeClassifier()
认真分析下,感觉还是有点啰嗦,故有了下面更为简洁的版本:
具体是不是大家常用的不清楚,个人感觉平时常用的应该就是这些了。
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.linear_model.stochastic_gradient import SGDClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neural_network.multilayer_perceptron import MLPClassifier
from sklearn.svm import SVC
参数均为默认值,倘若需要配置参数什么的,可参考上面提到的“函数封装”法
TF-IDF可参考我这篇(建议多查查别的资料了解了解):
【Python】向量空间模型:TF-IDF实例实现(set.union())
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
train_v=vectorizer.fit_transform(train.data)
test_v=vectorizer.transform(test.data)
选取20个类中7种比较典型的类别进行实验
select = ['alt.atheism','comp.graphics','misc.forsale','rec.autos',
'sci.crypt','soc.religion.christian','talk.politics.guns']
train=fetch_20newsgroups(subset='train',categories=select)
test=fetch_20newsgroups(subset='test',categories=select)
分类器可以直接一个list装好,遍历即可:
Classifier = [MultinomialNB(),DecisionTreeClassifier(),KNeighborsClassifier()]
但考虑到每个方法输出正确率时,还需要分类器名字,所以:
Classifier_str = ['MultinomialNB()','DecisionTreeClassifier()','KNeighborsClassifier()',
'LogisticRegression()','SGDClassifier()','RandomForestClassifier()',
'AdaBoostClassifier()','GradientBoostingClassifier()','MLPClassifier()','SVC()']
for i in Classifier_str:
model = eval(i)
model.fit(train_v,train.target)
print(i+"准确率为:",model.score(test_v,test.target))
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
1、选取7种比较典型类别数据预测结果:

十种分类器的分类结果都达到了及格线
其中适合稀疏矩阵的SGD和多层感知器的预测结果最为不错
2、选取全部数据,十种分类算法结果:
或许我应该记录每种算法运行时间?

其中前7种分类方法比较快,后3种花费时间约是总时间的95%
import time
t0=time.time()
print('程序开始的时间:',time.strftime('%H:%M:%S',time.localtime(time.time())))
import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.linear_model.stochastic_gradient import SGDClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neural_network.multilayer_perceptron import MLPClassifier
from sklearn.svm import SVC
select = ['alt.atheism','comp.graphics','misc.forsale','rec.autos',
'sci.crypt','soc.religion.christian','talk.politics.guns']
train=fetch_20newsgroups(subset='train',categories=select)
test=fetch_20newsgroups(subset='test',categories=select)
vectorizer = TfidfVectorizer()
train_v=vectorizer.fit_transform(train.data)
test_v=vectorizer.transform(test.data)
Classifier = [MultinomialNB(),DecisionTreeClassifier(),KNeighborsClassifier(),
LogisticRegression(),SGDClassifier(),RandomForestClassifier()]
Classifier_str = ['MultinomialNB()','DecisionTreeClassifier()','KNeighborsClassifier()',
'LogisticRegression()','SGDClassifier()','RandomForestClassifier()',
'AdaBoostClassifier()','GradientBoostingClassifier()','MLPClassifier()','SVC()']
for i in Classifier_str:
t2=time.time()
model = eval(i)
model.fit(train_v,train.target)
print(i+"准确率为:",model.score(test_v,test.target))
print(i+'用时:%.6fs'%(time.time()-t2))
t1=time.time()
print('程序结束的时间:',time.strftime('%H:%M:%S',time.localtime(time.time())))
print("用时:%.2fs"%(t1-t0))
部分新结果:

用20 newsgroups数据来进行NLP处理之文本分类
20 newsgroups数据介绍以及文本分类实例
数据集介绍数据集链接:http://qwone.com/~jason/20Newsgroups/(比较慢,建议Science上网)当然这里用不到这个数据集,sklearn导入会自动下载,倘若比较慢,可参考:sklearn.datasets.fetch_20newsgroups的下载速度极慢采用离线下载导入等别的方法具体实践中,稍等了一会儿就好了的。sklearn自带数据集datasets,划分好训练集和测试集了。from sklearn.datasets import fetch_20newsgr
MultinomialNB准确率为: 0.8960196779964222
SGDClassifier准确率为: 0.9724955277280859
LogisticRegression准确率为: 0.9304561717352415
SVC准确率为: 0.13372093023255813
LinearSVC准确率为: 0.9749552772808586
LinearSVR准确率为: 0.00022361359570661896
MLPClassifier准确率为: 0.9758497316636852
KNeighborsClassifier准确率为: 0.4584078711
20 newsgroups数据集18000篇新闻文章,一共涉及到20种话题,所以称作20 newsgroups text dataset,分文两部分:训练集和测试集,通常用来做文本分类.
sklearn提供了该数据的接口:sklearn.datasets.fetch_20newsgroups,我们以sklearn的文档来解释下如何使用该数据...
1. 问题定义
在这个项目中会采用20Newgroups的数据,这是在网上非常流行的对文本进行分类和聚类的数据集。数据集中的数据分为两部分,一部分是用来训练算法模型的数据,一部分是用来评估算法的新数据。网上还提供了3个数据集,这里采用了20new-bydate这个数据集进行项目研究。这个数据集是按照日期进行排序的,并去掉了部分重复数据和header,共包含18846个文档。
2.导入数据
这里使用...
1、简述LSTM模型
LSTM是长短期记忆神经网络,根据论文检索数据大部分应用于分类、机器翻译、情感识别等场景,在文本中,主要使用tensorflow及keras,搭建LSTM模型实现新闻分类案例。(只讨论和实现其模型的应用案例,不去叙述起实现原理)
2、 数据处理
需要有新闻数据和停用词文档做前期的数据准备工作,使用jieba分词和pandas对初始数据进行预处理工作,数据总量为12000。初始数据集如下图:
首先读取停用词列表,其次使用pandas对数据文件读取,使用jieba库对每行数据进
gensim是Python中一种用于文本挖掘和自然语言处理的库。4.0.0是gensim的最新版本,其中包含了一些重要的更新和改进。gensim 4.0.0whl是用于安装gensim 4.0.0的whl文件,它可以通过pip工具轻松安装。
gensim 4.0.0更新了许多重要的功能,包括支持用于文本分类和聚类的transformers框架、支持用于快速近似相似度搜索的annoy和nmslib等索引库、支持通过Word Mover's Distance计算文本相似度等。gensim 4.0.0还针对效率进行了大量改进,例如,现在可以使用多线程处理,从而加速训练速度。
此外,gensim 4.0.0还增加了各种新的API,如newsgroup20数据集、TensorBoard回调、按主题分类的文档加权等。
总之,gensim 4.0.0是一种功能强大的文本挖掘和自然语言处理库,它的使用可以使得文本处理变得更加便捷高效。