Python机器学习数据集获取指南

与其他编程练习相比,机器学习项目是代码和数据的混合体。你需要两者才能获得结果并做有用的事情。多年来,许多知名的公共数据集被创建,其中许多已成为标准或基准。在本教程中,我们将了解如何轻松获取这些知名的公共数据集。我们还将学习如何在现有数据集不满足我们的需求时制作一个合成数据集。

完成本教程后,您将了解

  • 在哪里可以找到免费的机器学习项目数据集
  • 如何使用 Python 中的库下载数据集
  • 如何使用 scikit-learn 生成合成数据集

通过我的新书 Python for Machine Learning 启动您的项目,其中包含分步教程和所有示例的Python源代码文件。

让我们开始吧。

Python机器学习数据集获取指南
照片由 Olha Ruskykh 拍摄。部分权利保留。

教程概述

本教程分为四个部分;它们是

  1. 数据集存储库
  2. 在 scikit-learn 和 Seaborn 中检索数据集
  3. 在 TensorFlow 中检索数据集
  4. 在 scikit-learn 中生成数据集

数据集存储库

机器学习已经发展了几十年,因此有一些具有历史意义的数据集。这些数据集中最知名的存储库之一是 UCI 机器学习存储库。那里的大多数数据集都很小,因为当时的技术不足以处理更大的数据。该存储库中的一些著名数据集是鸢尾花数据集(由 Ronald Fisher 于 1936 年推出)和 20 个新闻组数据集(文本数据,通常在信息检索文献中引用)。

较新的数据集通常体积更大。例如,ImageNet 数据集超过 160 GB。这些数据集通常在 Kaggle 中找到,我们可以按名称搜索它们。如果我们需要下载它们,建议在注册帐户后使用 Kaggle 的命令行工具。

OpenML 是一个较新的存储库,托管了大量数据集。它很方便,因为您可以按名称搜索数据集,而且它还提供了一个标准化的 Web API 供用户检索数据。如果您想使用 Weka,它提供 ARFF 格式的文件,这将非常有用。

但仍然有许多数据集是公开可用的,但由于各种原因并未包含在这些存储库中。您还可以查看 Wikipedia 上的“机器学习研究数据集列表”。该页面包含按不同类别分类的数据集列表,并附有下载链接。

在 scikit-learn 和 Seaborn 中检索数据集

很自然地,您可以通过从网上下载数据集来获取这些数据集,无论是通过浏览器、命令行,使用 wget 工具,还是使用 Python 中的 requests 等网络库。由于其中一些数据集已成为标准或基准,因此许多机器学习库都创建了函数来帮助检索它们。出于实际原因,数据集通常不会随库一起提供,而是在您调用函数时实时下载。因此,您需要稳定的互联网连接才能使用它们。

Scikit-learn 就是一个例子,您可以使用其 API 下载数据集。相关函数定义在 sklearn.datasets 下,您可以在以下位置查看函数列表:

例如,您可以使用 load_iris() 函数获取鸢尾花数据集,如下所示:

除非指定了参数 as_frame=True,否则 load_iris() 函数将返回 numpy 数组(即没有列标题),而不是 pandas DataFrame。此外,我们将 return_X_y=True 传递给函数,因此只返回机器学习特征和目标,而不是元数据,例如数据集的描述。上面的代码打印如下内容:

将特征和目标分开对于训练 scikit-learn 模型很方便,但将它们结合起来进行可视化会很有帮助。例如,我们可以组合上面的 DataFrame,然后使用 Seaborn 可视化相关图

从相关图可以看出,目标 0 很容易区分,但目标 1 和 2 通常有一些重叠。由于此数据集也可用于演示绘图功能,我们可以从 Seaborn 找到相应的数据加载函数。我们可以将上面的代码重写为以下内容:

Seaborn 支持的数据集更为有限。我们可以通过运行以下命令查看所有受支持数据集的名称:

以下是 Seaborn 的所有数据集:

scikit-learn 中有许多类似的函数可以加载“玩具数据集”。例如,我们有以类似方式定义的 load_wine()load_diabetes()

更大的数据集也类似。例如,我们有 fetch_california_housing(),它需要从互联网下载数据集(因此函数名称中带有“fetch”)。Scikit-learn 文档称这些为“真实世界数据集”,但实际上,玩具数据集同样是真实的。

如果我们还需要更多,scikit-learn 提供了一个方便的函数来读取 OpenML 中的任何数据集。例如:

有时,我们不应使用名称来识别 OpenML 中的数据集,因为可能有多个同名数据集。我们可以按如下方式在 OpenML 上搜索数据 ID 并在函数中使用它:

上面的代码中的数据 ID 指的是泰坦尼克号数据集。我们可以将代码扩展为以下内容,以展示如何获取泰坦尼克号数据集然后运行逻辑回归:

想开始学习机器学习 Python 吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

在 TensorFlow 中检索数据集

除了 scikit-learn,TensorFlow 也是我们可以用于机器学习项目的工具。出于类似的原因,TensorFlow 也有一个数据集 API,可以为您提供最适合 TensorFlow 的格式的数据集。与 scikit-learn 不同,该 API 不是标准 TensorFlow 包的一部分。您需要使用以下命令进行安装:

所有数据集的列表可在目录中找到:

所有数据集都由名称标识。名称可以在上面的目录中找到。您也可以使用以下方法获取名称列表:

这会打印出超过 1000 个名称。

例如,让我们以 MNIST 手写数字数据集为例。我们可以如下下载数据:

这向我们展示了 tfds.load() 返回一个 tensorflow.data.OptionsDataset 类型的对象

特别是,此数据集的数据实例(图像)是形状为 (28,28,1) 的 numpy 数组,目标(标签)是标量。

经过少量调整,数据就可以在 Keras 的 fit() 函数中使用。示例如下:

如果我们提供了 as_supervised=True,数据集将是元组 (features, targets) 的记录,而不是字典。这对于 Keras 是必需的。此外,要将数据集用于 fit() 函数,我们需要创建一个批次的迭代器。这可以通过设置数据集的批次大小来完成,将其从 OptionsDataset 对象转换为 BatchDataset 对象。

我们应用了 LeNet5 模型进行图像分类。但由于数据集中目标是数值(0 到 9),而不是布尔向量,因此我们在 compile() 函数中指定 sparse_categorical_accuracysparse_categorical_crossentropy,让 Keras 在计算准确率和损失之前将 softmax 输出向量转换为数字。

这里的关键是理解每个数据集的形状都不同。当您将其与 TensorFlow 模型一起使用时,需要调整模型以适应数据集。

在 scikit-learn 中生成数据集

在 scikit-learn 中,有一组非常有用的函数可以生成具有特定属性的数据集。由于我们可以控制合成数据集的属性,因此有助于在其他数据集中不常见的情况下评估模型的性能。

Scikit-learn 文档称这些函数为样本生成器。它易于使用;例如:

make_circles() 函数生成一个二维平面上的散点坐标,使得有两个类呈同心圆形式排列。我们可以通过参数 factornoise 来控制圆的大小和重叠程度。这个合成数据集有助于评估支持向量机等分类模型,因为没有线性分隔器可用。

make_circles() 的输出始终是两个类别,坐标也始终是二维的。但其他一些函数可以生成更多类别或更高维度的点,例如 make_blob()。在下面的示例中,我们生成了一个 3D 数据集,包含 4 个类别:

还有一些函数可以为回归问题生成数据集。例如,make_s_curve()make_swiss_roll() 将生成 3D 坐标,目标为连续值。

如果我们不想从几何角度看待数据,还有make_classification()make_regression()。与其它函数相比,这两个函数为我们提供了更多对特征集的控制,例如引入一些冗余或无关的特征。

下面是使用make_regression()生成数据集并在此数据集上运行线性回归的示例

在上面的示例中,我们创建了10维特征,但只有4个是有信息的。因此,从回归结果来看,我们发现只有4个系数显著非零。

类似地,使用make_classification()的示例如下。在本例中使用了支持向量机分类器。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

存储库

文章

API

总结

在本教程中,您将探索在Python中加载常用数据集或生成数据集的各种选项。

具体来说,你学到了:

  • 如何使用scikit-learn、Seaborn和TensorFlow中的数据集API加载常见的机器学习数据集
  • 不同API返回的数据集格式之间的小差异以及如何使用它们
  • 如何使用scikit-learn生成数据集

掌握机器学习 Python!

Python For Machine Learning

更自信地用 Python 编写代码

...从学习实用的 Python 技巧开始

在我的新电子书中探索如何实现
用于机器学习的 Python

它提供自学教程数百个可运行的代码,为您提供包括以下技能:
调试性能分析鸭子类型装饰器部署等等...

向您展示高级 Python 工具箱,用于
您的项目


查看内容

Python机器学习数据集获取指南的3条回复

  1. Bret Bernhoft 2022年4月8日晚上10:19 #

    这是IT领域一个经典问题,无论是训练人工智能还是构建SAAS平台;获取上线数据。我很欣赏本文的技术指导,因为在当今互联网的广阔天地中,我很少看到这样的内容。

    • James Carmichael 2022年4月9日早上8:39 #

      Bret,反馈很棒!

  2. Emily George 2022年4月13日晚上9:55 #

    获取数据集对我来说并不容易。但在这里我发现了一些算法,这让我想要尝试和学习。谢谢如此好的文章!
    这是我的一些作品:https://www.annotationsupport.com/services.php

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。