在机器学习领域,文本分类是一个常见的任务。20个新闻组数据集是一个广泛使用的基准数据集,它包含了约2万个新闻组帖子,涵盖了20个不同的类别。本文将介绍如何使用Python的scikit-learn库来加载和处理这个数据集。
20个新闻组数据集包含了大量的文本数据,这些数据可以用于训练文本分类模型。数据集中的每个帖子都被标记了一个类别,这使得它成为一个监督学习问题。数据集的维度为1,意味着每个样本只有一个特征,即文本内容。
在加载数据集时,可以通过设置不同的参数来定制数据加载的行为。以下是一些常用的参数及其说明:
data_home: str or path-like, default=None
指定数据集的下载和缓存文件夹。如果为None,则所有scikit-learn数据存储在‘~/scikit_learn_data’子文件夹中。
subset: {'train', 'test', 'all'}, default='train'
选择要加载的数据集:'train'表示训练集,'test'表示测试集,'all'表示两者都有,且顺序是随机的。
categories: array-like, dtype=str, default=None
如果为None(默认),则加载所有类别。如果不为None,则为要加载的类别名称列表(其他类别将被忽略)。
shuffle: bool, default=True
是否对数据进行随机打乱。对于假设样本是独立同分布(i.i.d.)的模型(如随机梯度下降)来说,这可能很重要。
random_state: int, RandomState instance or None, default=42
确定数据集随机打乱时的随机数生成。传递一个整数可以获得跨多次函数调用的可重复输出。
remove: tuple, default=()
可能包含('headers', 'footers', 'quotes')的任意子集。这些是将从新闻组帖子中检测并移除的文本类型,以防止分类器过度拟合在元数据上。
download_if_missing: bool, default=True
如果为False,在数据本地不可用时,而不是尝试从源站点下载数据,会引发OSError。
return_X_y: bool, default=False
如果为True,则返回(data.data, data.target)而不是Bunch对象。
n_retries: int, default=3
当遇到HTTP错误时重试的次数。
delay: float, default=1.0
重试之间的秒数。
加载数据集后,将返回一个Bunch对象,其中包含以下属性:
data: list of shape (n_samples,)
要学习的数据列表。
target: ndarray of shape (n_samples,)
目标标签。
filenames: list of shape (n_samples,)
数据的位置路径。
DESCR: str
数据集的完整描述。
target_names: list of shape (n_classes,)
目标类别的名称。
(data, target): tuple if return_X_y=True
如果return_X_y=True,则返回两个ndarray的元组。第一个包含一个形状为(n_samples, n_classes)的2D数组,每行代表一个样本,每列代表一个特征。第二个数组的形状为(n_samples,),包含目标样本。
以下是如何使用scikit-learn加载20个新闻组数据集的示例代码:
from sklearn.datasets import fetch_20newsgroups
cats = ['alt.atheism', 'sci.space']
newsgroups_train = fetch_20newsgroups(subset='train', categories=cats)
print(list(newsgroups_train.target_names))
print(newsgroups_train.filenames.shape)
print(newsgroups_train.target.shape)
print(newsgroups_train.target[:10])
这段代码首先导入了fetch_20newsgroups函数,然后定义了要加载的类别,接着加载了训练集,并打印了目标类别名称、文件名数量、目标标签形状以及前10个目标标签的值。