20 newsgroups数据介绍以及文本分类实例

简介: 20 newsgroups数据介绍以及文本分类实例

简介


20 newsgroups数据集18000篇新闻文章,一共涉及到20种话题,所以称作20 newsgroups text dataset,分文两部分:训练集和测试集,通常用来做文本分类.


基本使用


sklearn提供了该数据的接口:sklearn.datasets.fetch_20newsgroups,我们以sklearn的文档来解释下如何使用该数据集。

from sklearn.datasets import fetch_20newsgroups
from pprint import pprint
newsgroups_train = fetch_20newsgroups(subset='train')
pprint(list(newsgroups_train.targernames))


我们可以看到一共有20类:

['alt.atheism',
 'comp.graphics',
 'comp.os.ms-windows.misc',
 'comp.sys.ibm.pc.hardware',
 'comp.sys.mac.hardware',
 'comp.windows.x',
 'misc.forsale',
 'rec.autos',
 'rec.motorcycles',
 'rec.sport.baseball',
 'rec.sport.hockey',
 'sci.crypt',
 'sci.electronics',
 'sci.med',
 'sci.space',
 'soc.religion.christian',
 'talk.politics.guns',
 'talk.politics.mideast',
 'talk.politics.misc',
 'talk.religion.misc']


我们看下数据newsgroups_train 的一些属性

print(newsgroups_train.filenames.shape) # (11314,)
print(newsgroups_train.target.shape) # (11314,)

print(newsgroups_train.target[:10]) # [ 7  4  4  1 14 16 13  3  2  4]
print(newsgroups_train['data'][:2]) # 前三篇文章["From: lerxst@wam.umd.edu (where's my thin...


fetch_20newsgroups的参数设置:

fetch_20newsgroups(data_home=None, # 文件下载的路径
                   subset='train', # 加载那一部分数据集 train/test
                   categories=None, # 选取哪一类数据集[类别列表],默认20类
                   shuffle=True,  # 将数据集随机排序
                   random_state=42, # 随机数生成器
                   remove=(), # ('headers','footers','quotes') 去除部分文本
                   download_if_missing=True # 如果没有下载过,重新下载
                   )


将文本转为TF-IDF向量


from sklearn.feature_extraction.text import TfidfVectorizer
# 我们选取三类作为实验
categories = ['alt.atheism', 'talk.religion.misc','comp.graphics', 'sci.space']
# 加载数据集
newsgroups_train = fetch_20newsgroups(subset='train',categories=categories)
# 提取tfidf特征
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(newsgroups_train.data)
print(vectors.shape)
print(vectors.nnz / float(vectors.shape[0]))
# 输出
(2034, 34118)
159.0132743362832


我们从输出可以看出,提取的TF-IDF 向量是非常稀疏的,超过30000维的特征才有159个非零特征


使用贝叶斯进行分类


from sklearn.feature_extraction.text import TfidfVectorizer
# 我们选取三类作为实验
categories = ['alt.atheism', 'talk.religion.misc','comp.graphics', 'sci.space']
# 加载数据集
newsgroups_train = fetch_20newsgroups(subset='train',categories=categories)
# 提取tfidf特征
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(newsgroups_train.data)
print(vectors.shape)
print(vectors.nnz / float(vectors.shape[0]))
# MultinomialNB实现文本分类
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score,f1_score
# 加载测试集
newsgroups_test=fetch_20newsgroups(subset='test',categories=categories)
# 提取测试集tfidf特征
vectors_test=vectorizer.transform(newsgroups_test.data)
# 训练
clf=MultinomialNB(alpha=0.1)
clf.fit(vectors,newsgroups_train.target)
# 预测
pred=clf.predict(vectors_test)
print(f1_score(newsgroups_test.target,pred,average='macro'))
print(accuracy_score(newsgroups_test.target,pred))
# 输出
f1_score: 0.8823530044163621
accuracy: 0.8965262379896526


参考


数据集地址:http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/news20.html

sklearn关于20newsgroup的介绍http://scikit-learn.org/stable/datasets/twenty_newsgroups.html


相关文章
|
6月前
|
机器学习/深度学习 JSON 算法
如何在自定义数据集上训练 YOLOv8 实例分割模型
在本文中,我们将介绍微调 YOLOv8-seg 预训练模型的过程,以提高其在特定目标类别上的准确性。Ikomia API简化了计算机视觉工作流的开发过程,允许轻松尝试不同的参数以达到最佳结果。
【yolo训练数据集】标注好的垃圾分类数据集共享
【yolo训练数据集】标注好的垃圾分类数据集共享
1995 114
【yolo训练数据集】标注好的垃圾分类数据集共享
|
6月前
|
IDE 数据处理 开发工具
垃圾分类模型训练部署教程,基于MaixHub和MaixPy-k210(1)
我的准备 Maix duino开发板一块(含摄像头配件) Type-c数据集一根
302 0
|
6月前
|
IDE 开发工具
垃圾分类模型训练部署教程,基于MaixHub和MaixPy-k210(3)
在开发板上运行模型 1、烧录模型文件到板子 使用kflash_gui工具,可以完成这个任务。
388 0
【图像分类数据集】非常全面实用的垃圾分类图片数据集共享
【图像分类数据集】非常全面实用的垃圾分类图片数据集共享
927 24
【图像分类数据集】非常全面实用的垃圾分类图片数据集共享
|
13天前
|
机器学习/深度学习 数据采集 自然语言处理
如何使用深度学习模型来提高命名实体识别的准确率?
如何使用深度学习模型来提高命名实体识别的准确率?
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
如何使用深度学习模型来提高命名实体识别的准确率
如何使用深度学习模型来提高命名实体识别的准确率
|
6月前
|
算法 数据处理 计算机视觉
论文介绍:基于点标注的实例分割
【5月更文挑战第24天】研究人员提出了一种创新的弱监督实例分割方法,通过点标注代替传统的像素级掩模标注,显著降低数据标注成本和时间。点标注方案只需在对象边界框内标注少量点,与Mask R-CNN兼容,实现接近全监督性能。改进的PointRend模块(Implicit PointRend)在点监督下表现出色,简化了模型设计。实验表明,使用10个点标注的Mask R-CNN能达到全监督模型的性能,为实例分割的实际应用开辟了新途径。尽管取得初步成功,但面临处理不同尺度对象和提高泛化能力的挑战。
70 4
|
计算机视觉
【多标签文本分类】《采用平衡函数的大规模多标签文本分类》
使用最常见的BERT+fc的多标签文本分类模型,只是改进了一下损失函数。
|
机器学习/深度学习 自然语言处理 算法
NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法
NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法
NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法