数据集介绍

数据集链接: http://qwone.com/~jason/20Newsgroups/ (比较慢,建议Science上网)

当然这里用不到这个数据集,sklearn导入会自动下载,倘若比较慢,可参考: sklearn.datasets.fetch_20newsgroups的下载速度极慢采用离线下载导入 等别的方法

具体实践中,稍等了一会儿就好了的。

sklearn自带数据集datasets,划分好训练集和测试集了。

from sklearn.datasets import fetch_20newsgroups   #获取数据集

通过函数封装调用skearn分类器

最开始,参考于这篇博客:
使用sklearn和tf-idf变换的针对20Newsgroup数据集做文本分类
打算通过函数调用的方式来划分清楚各个分类方法:

def SGD():#随机梯度下降
    from sklearn.linear_model.stochastic_gradient import SGDClassifier
    return SGDClassifier()
def MultinomialNB(): #朴素贝叶斯(naive bayes)
    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):      #K近邻
    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() 

认真分析下,感觉还是有点啰嗦,故有了下面更为简洁的版本:

十种sklearn常用分类方法

具体是不是大家常用的不清楚,个人感觉平时常用的应该就是这些了。

from sklearn.naive_bayes import MultinomialNB #朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier #决策树
from sklearn.neighbors import KNeighborsClassifier #K近邻
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 #平时就是叫AdaBoost
from sklearn.ensemble import GradientBoostingClassifier #梯度提升决策树(比较慢)
from sklearn.neural_network.multilayer_perceptron import MLPClassifier #多层感知器(比较慢)
from sklearn.svm import SVC #支持向量机(比较慢)

参数均为默认值,倘若需要配置参数什么的,可参考上面提到的“函数封装”法

将文章数据向量化(TF-IDF算法)

TF-IDF可参考我这篇(建议多查查别的资料了解了解):
【Python】向量空间模型:TF-IDF实例实现(set.union())

from sklearn.feature_extraction.text import TfidfVectorizer #TF-IDF文本特征提取
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 #TF-IDF文本特征提取
#平时常用的一些分类方法
from sklearn.naive_bayes import MultinomialNB #朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier #决策树
from sklearn.neighbors import KNeighborsClassifier #K近邻
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 #平时就是叫AdaBoost
from sklearn.ensemble import GradientBoostingClassifier #梯度提升决策树(慢)
from sklearn.neural_network.multilayer_perceptron import MLPClassifier #多层感知器(慢)
from sklearn.svm import SVC #支持向量机(慢)
#选取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)
#train=fetch_20newsgroups(subset='train')
#test=fetch_20newsgroups(subset='test')
#将文章数据向量化(TF-IDF算法)
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))
    #y_predict=model.predict(test_v)
    #print(np.mean(y_predict==test.target))
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是一种功能强大的文本挖掘和自然语言处理库,它的使用可以使得文本处理变得更加便捷高效。