为什么数据准备在机器学习中如此重要

在预测建模项目中,机器学习算法学习从输入变量到目标变量的映射。

预测建模项目最常见的形式涉及所谓的结构化数据或表格数据。这种数据看起来像电子表格或矩阵中的数据,有示例行和每个示例的特征列。

我们不能在原始数据上拟合和评估机器学习算法;相反,我们必须转换数据以满足各个机器学习算法的要求。更重要的是,我们必须为数据选择一种表示形式,以便在预测建模项目中,在可用资源的情况下,将预测问题的未知底层结构最好地暴露给学习算法,从而获得最佳性能。

鉴于我们有开源库中高度参数化机器学习算法的标准实现,拟合模型已成为例行公事。因此,每个预测建模项目最具挑战性的部分是如何准备对项目而言独一无二的东西:用于建模的数据。

在本教程中,您将了解数据准备对于每个机器学习项目的重要性。

完成本教程后,您将了解:

  • 机器学习中的结构化数据由一个大表中的行和列组成。
  • 数据准备是每个机器学习项目中必不可少的一步。
  • 机器学习算法的常规性意味着每个项目的大部分精力都花在了数据准备上。

通过我的新书《机器学习数据准备启动您的项目,包括分步教程和所有示例的Python源代码文件。

让我们开始吧。

Why Data Preparation Is So Important in Machine Learning

为什么数据准备在机器学习中如此重要
照片由lwtt93提供,保留部分权利。

教程概述

本教程分为三个部分;它们是:

  1. 机器学习中的数据是什么
  2. 原始数据必须准备
    1. 机器学习算法需要数字
    2. 机器学习算法有要求
    3. 模型性能取决于数据
  3. 预测建模主要是数据准备

机器学习中的数据是什么

预测建模项目涉及从数据中学习。

数据指的是来自领域中的示例或案例,它们描述了您想要解决的问题。在监督学习中,数据由示例组成,其中每个示例都有一个将提供给模型的输入元素,以及一个模型预期预测的输出或目标元素。

我们所说的数据是对现实世界现象的观察。……每条数据都提供了一个了解现实有限方面的小窗口。

— 第1页,《机器学习的特征工程》,2018年。

分类是监督学习问题的一个例子,其中目标是一个标签;回归是监督学习问题的一个例子,其中目标是一个数字。

输入数据可能有很多形式,例如图像、时间序列、文本、视频等。最常见的输入数据类型通常称为表格数据或结构化数据。这种数据就像您在电子表格、数据库或逗号分隔值(CSV)文件中看到的那样。这将是我们关注的数据类型。

想象一个大数据表。在线性代数中,我们将这个数据表称为矩阵。该表由行和列组成。一行代表问题领域中的一个示例,可以称为“示例”、“实例”或“案例”。一列代表对该示例观察到的属性,可以称为“变量”、“特征”或“属性”。

  • 。来自领域中的单个示例,在机器学习中通常称为实例或示例。
  • 。为每个示例记录的单个属性,在机器学习中通常称为变量或特征。

例如,用于模型输入的列称为输入变量,而包含要预测的目标的列称为输出变量。用于训练模型的行称为训练数据集,用于评估模型的行称为测试数据集。

  • 输入变量:数据集中提供给模型以进行预测的列。
  • 输出变量。数据集中要由模型预测的列。

当您收集数据时,您可能需要对其进行转换,使其形成一个大表。

例如,如果您的数据位于关系数据库中,通常会以所谓的“范式”将实体表示在单独的表中,以最大程度地减少冗余。为了创建一个大表,其中每个“主题”或“实体”都有一行,您可能需要反转此过程,并通过称为反规范化的过程在数据中引入冗余。

如果您的数据在电子表格或数据库中,标准做法是提取并以CSV格式保存数据。这是一种标准表示形式,它可移植、易于理解,并已准备好进行预测建模过程,无需外部依赖。

现在我们熟悉了结构化数据,接下来让我们看看为什么我们需要在使用数据模型之前准备数据。

想开始学习数据准备吗?

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

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

原始数据必须准备

从您的领域收集的数据称为原始数据,是在您想要解决的问题背景下收集的。

这意味着您必须首先定义要预测的内容,然后收集您认为将有助于您最好地进行预测的数据。这种数据收集工作通常需要领域专家,并且可能需要多次迭代地收集更多数据,包括当新的数据行可用时,以及当新的列被确定为可能与进行预测相关时。

  • 原始数据:以从领域提供的形式存在的数据。

在几乎所有情况下,原始数据都需要更改,然后才能将其用作机器学习建模的基础。

特征是原始数据某一方面的一种数字表示。特征位于机器学习管道中的数据和模型之间。特征工程是从原始数据中提取特征并将其转换为适合机器学习模型的格式的行为。

— 第vii页,《机器学习的特征工程》,2018年。

没有数据准备的情况非常罕见或微不足道,以至于在每个机器学习项目中准备原始数据几乎是一条规则。

在机器学习项目中,您必须准备原始数据有三个主要原因。

让我们依次看看每一个。

1. 机器学习算法需要数字

即使您的数据以一个大的行和列表格表示,表格中的变量也可能具有不同的数据类型。

一些变量可能是数字,例如整数、浮点值、等级、比率、百分比等。其他变量可能是名称、类别或用字符或单词表示的标签,有些可能是二进制的,用0和1或True和False表示。

问题在于,机器学习算法的核心操作是数字数据。它们将数字作为输入并预测一个数字作为输出。所有数据都被视为向量和矩阵,使用线性代数中的术语。

因此,在训练、评估和使用机器学习模型之前,必须更改原始数据。

有时数据的更改可以由机器学习算法在内部管理;最常见的是,这必须由机器学习实践者在建模之前处理,这通常被称为“数据准备”或“数据预处理”。

2. 机器学习算法有要求

即使您的原始数据只包含数字,也可能需要进行一些数据准备。

对于给定的预测建模项目,有许多不同的机器学习算法可供选择。我们无法知道哪种算法是合适的,更不用说最适合我们的任务。因此,系统地评估一组不同的候选算法并发现哪种在我们的数据上效果良好或最好是一种好做法。

问题在于,每种算法对数据都有特定的要求或期望。

……数据准备可以成就或毁掉模型的预测能力。不同的模型对模型中预测变量的类型有不同的敏感性;预测变量如何进入模型也很重要。

— 第27页,《应用预测建模》,2013年。

例如,一些算法假设每个输入变量,以及可能的目标变量,具有特定的概率分布。对于期望每个数字输入变量具有高斯概率分布的线性机器学习模型来说,情况通常如此。

这意味着如果您的输入变量不是高斯分布或近似高斯分布,您可能需要更改它们,使它们成为高斯分布或更接近高斯分布。或者,这可能会促使您重新配置算法,使其对数据有不同的期望。

已知某些算法在存在与目标变量无关或冗余的输入变量时表现更差。还有一些算法如果两个或多个输入变量高度相关,则会受到负面影响。在这些情况下,可能需要识别和删除无关或高度相关的变量,或者可能需要使用替代算法。

还有一些算法对输入变量的概率分布或冗余的存在要求很少,但反过来,可能需要更多的示例(行)才能学习如何做出良好的预测。

数据预处理的必要性由所使用的模型类型决定。有些过程,例如基于树的模型,对预测数据特征的敏感性并不显著。而另一些,例如线性回归,则不然。

— 第27页,《应用预测建模》,2013年。

因此,数据和算法的选择之间存在相互作用。主要是,算法对数据施加期望,而遵守这些期望要求数据得到适当准备。反之,数据的形式可能有助于选择更可能有效的算法进行评估。

3. 模型性能取决于数据

即使您准备好数据以满足每个模型的期望,您也可能无法获得最佳性能。

通常,具有强期望的机器学习算法的性能会随着期望被违反的程度而逐渐下降。

此外,即使在忽略或完全违反其期望的情况下,算法表现良好或优于其他方法也很常见。这种情况非常普遍,必须将其纳入机器学习算法的准备和评估中。

模型中预测变量有不同的表示方式,并且其中一些表示方式优于其他方式,这一思想引出了特征工程的概念——创建数据表示以提高模型有效性的过程。

— 第3页,《特征工程与选择》,2019年。

机器学习算法的性能只取决于用于训练它的数据。这通常总结为“垃圾进,垃圾出”。“垃圾”这个词很严厉,但它可能意味着问题的“弱表示”,不足以捕捉学习如何将输入示例映射到输出所需的动态。

我们姑且认为我们有“足够”的数据来捕捉输入和输出变量之间的关系。这是一个模糊且领域特定的原则,在实践中,我们拥有的是现有数据,我们的工作就是利用这些数据做到最好。

数据集可能是我们试图解决的问题的“弱表示”,原因有很多,尽管主要有两类原因。可能是因为原始数据中压缩了复杂的非线性关系,这些关系可以通过数据准备技术解包。也可能是因为数据不完美,从观测值中的轻微随机波动(称为统计噪声)到导致超出范围值和冲突数据的错误。

  • 复杂数据:原始数据包含需要暴露的压缩复杂非线性关系。
  • 凌乱数据:原始数据包含统计噪声、错误、缺失值和冲突示例。

我们可以通过两种方式思考如何从预测建模项目中获得最大收益:专注于模型和专注于数据。

我们可以最小化原始数据准备并开始建模。这将完全依赖于模型来梳理数据中的关系,并尽可能学习从输入到输出的映射函数。这可能是一个合理的项目路径,可能需要大型数据集和具有少量期望的灵活而强大的机器学习算法,例如随机森林梯度提升

或者,我们可以将重心重新放回数据和数据准备过程。这要求每行数据最大程度或最好地表达数据用于建模的信息内容。就像关系数据库中数据去规范化为行和列一样,数据准备可以去规范化每个单独观测中固有的复杂结构。这也是一条合理的路径。它可能需要比现有数据更多的领域知识,但几乎无论使用何种机器学习算法,都可以实现良好甚至最佳的建模性能。

通常在任何给定项目中都会寻求这两种方法的平衡。也就是说,既探索强大而灵活的机器学习算法,又利用数据准备来最好地向学习算法展示数据的结构。

总而言之,数据预处理是通向更好数据的途径,进而实现更好的模型性能。

预测建模主要是数据准备

用机器学习算法对数据进行建模已经成为例行公事。

绝大多数常见、流行和广泛使用的机器学习算法已有数十年的历史。线性回归已有100多年的历史。

也就是说,大多数算法都得到了很好的理解和参数化,并且在开源软件(如Python中的scikit-learn机器学习库)中提供了标准定义和实现。

尽管算法在操作上得到了很好的理解,但大多数算法都没有令人满意的理论来解释它们为什么有效或如何将算法映射到问题。这就是为什么每个预测建模项目都是经验性的而不是理论性的,需要对算法在数据上进行系统实验的过程。

鉴于机器学习算法在很大程度上是例行公事,从项目到项目唯一变化的是用于建模的特定数据。

数据质量是数据管理中最重要的一个问题,因为脏数据往往会导致不准确的数据分析结果和错误的商业决策。

— 第xiii页,《数据清洗》,2019年。

如果您为一个分类或回归预测建模问题收集了数据,这可能是历史上第一次对该问题进行建模。您正在开辟新天地。这并不是说这类问题以前从未解决过;它可能已经解决过,如果结果已经发布,您可以从发现中学习。但正是今天,您特定的观察集合使您的预测建模问题变得独一无二。

因此,您项目的大部分时间将花在数据上。收集数据、验证数据、清洗数据、可视化数据、转换数据等等。

……有人说,高达80%的数据分析时间都花在了数据清洗和准备上。然而,作为数据分析工作流程(可视化、建模、报告)其余部分的先决条件,您必须熟练高效地掌握数据整理技术。

— 《使用 R 进行数据整理》,2016年,第v页。

您的工作是发现如何最好地将学习算法暴露给预测问题的未知底层结构。实现这一目标的方法是通过数据准备。

为了成为一名高效的机器学习实践者,您必须了解

  • 项目上要考虑的不同类型的数据准备。
  • 每种数据准备技术类别的少数几个顶级算法。
  • 何时使用以及如何配置顶级数据准备技术。

这通常是来之不易的知识,因为很少有专门针对该主题的资源。相反,您通常必须翻阅统计学文献和应用论文,以了解可用的内容以及如何使用它们。

实践者们一致认为,构建机器学习管道的大部分时间都花在了特征工程和数据清洗上。然而,尽管它很重要,但这个话题很少单独讨论。

— 第vii页,《机器学习的特征工程》,2018年。

进一步阅读

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

书籍

文章

总结

在本教程中,您了解了数据准备对于每个机器学习项目的重要性。

具体来说,你学到了:

  • 机器学习中的结构化数据由一个大表中的行和列组成。
  • 数据准备是每个机器学习项目中必不可少的一步。
  • 机器学习算法的常规性意味着每个项目的大部分精力都花在了数据准备上。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握现代数据准备!

Data Preparation for Machine Learning

在几分钟内准备好您的机器学习数据

...只需几行python代码

在我的新电子书中探索如何实现
机器学习数据准备

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
*特征选择*、*RFE*、*数据清洗*、*数据转换*、*缩放*、*降维*,以及更多...

将现代数据准备技术引入
您的机器学习项目


查看内容

对《为什么数据准备在机器学习中如此重要》的7条回复

  1. marco 2020年6月16日 上午4:06 #

    你好 Jason,
    我有一个关于Keras的问题。
    定义多输入模型和多输出模型(多头)的主要优点是什么?
    谢谢,
    Marco

  2. dem 2020年6月18日 上午10:36 #

    您是否认为未来组成项目的数据收集、数据预处理、模型选择配置等各种流程将由各自领域的专家来担任,而不是由一个人完成所有这些工作。似乎这种趋势已经开始,因为数据工程师和机器学习工程师的角色已经显示出这一点。

    • Jason Brownlee 2020年6月18日 下午1:19 #

      我认为项目99%的工作是准备数据和解释结果。

      对于大多数小型项目,模型选择已经自动化/变得微不足道。

  3. abhic 2022年7月8日 下午4:18 #

    嗨,Jason,

    感谢您的帖子。非常有帮助。我有一个关于在比较例如两个机器学习模型/算法A和B时的数据准备问题。

    假设模型A需要大量的数据准备/预处理(需要插补缺失值,分类变量需要转换为数值,标准化等),而模型B是鲁棒的,不需要太多数据预处理。我感兴趣的是使用CV比较它们的预测性能。我将使用相同的性能指标和相同的CV折叠。我的问题分为两部分。

    我是否应该准备数据,使其对任何算法都准备好(一致),然后使用这两个模型,即使这种准备对于模型B来说不是必需的?我认为这将是两个模型之间的“诚实”比较,两者都能看到相同的数据(在结构和值方面)。

    或者,我是否应该根据每个模型的要求以不同的方式准备数据,然后实施和评估它们的性能?我读过关于使用不同数据预处理步骤检查模型性能的文章。在这种情况下,在两个不同数据集上实现两个模型(一个需要大量数据准备,另一个需要很少数据准备)之间的比较会一致/“诚实”吗?

    我的问题也可以扩展到多个模型。

    如果您能分享您的想法或指引我到任何参考资料,我将不胜感激。谢谢。

    • James Carmichael 2022年7月9日 上午9:15 #

      嗨,abhic……请将您的问题缩小到单个问题,以便我们能更好地帮助您。

      • abhic 2022年7月10日 上午1:48 #

        谢谢詹姆斯。问题如下。

        在评估多个机器学习模型的预测性能时,您会建议一次性准备数据,以便所有模型都可以一致地使用相同的处理过的数据,还是应该根据每个模型的要求以不同的方式准备数据?

        任何建议或参考都将不胜感激。

发表回复

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