数据准备是将原始数据转化为学习算法的过程。
在某些情况下,数据准备是必须的步骤,以便以所需的输入格式为算法提供数据。在其他情况下,输入的最佳表示形式是未知的,需要通过反复试验来探索,以发现最适合特定模型和数据集的方法。
Max Kuhn 和 Kjell Johnson 撰写了一本新书,专注于数据准备这一重要主题,以及如何在机器学习项目中使用预测模型获得最佳数据。这本书的书名为《特征工程与选择:预测模型的实用方法》,于2019年出版。
在本文中,您将了解到我对《特征工程与选择》一书关于机器学习数据准备主题的评论和解析。
让我们开始吧!
概述
本教程分为三个部分;它们是:
- 特征工程与选择
- 书籍解析
- 关于本书的最终想法
特征工程与选择
《特征工程与选择:预测模型的实用方法》是由Max Kuhn 和 Kjell Johnson 撰写,并于2019年出版的书籍。
Kuhn 和 Johnson 是我最喜欢的实用机器学习书籍《应用预测建模》的作者,该书于2013年出版。Kuhn 还是机器学习流行的 caret R 包的作者。因此,他们出版的任何书籍,我都会立刻购买并研读。
这本新书专注于机器学习的数据准备问题。
作者们强调,尽管拟合和评估模型是常规的,但要在一个预测建模问题上取得良好性能,很大程度上取决于数据的准备方式。
尽管我们努力遵循这些最佳实践,但有时会沮丧地发现,最佳模型的预测性能不如预期,不如有用。这种性能的缺乏可能是由于 […] 收集到的相关预测变量的表示方式,使得模型难以获得良好的性能。
— 第xi页,《特征工程与选择》,2019年。
他们将为建模准备数据的过程称为“特征工程”。
这与我习惯的定义略有不同。我会称之为“数据准备”或“数据预处理”,而将“特征工程”作为一项子任务,专注于从现有数据创建新输入变量的系统性步骤。
尽管如此,我明白他们的观点,因为所有的数据准备都可以包含在这种定义中。
调整和重塑预测变量以使模型能够更好地揭示预测-响应关系,这被称为特征工程。
— 第xi页,《特征工程与选择》,2019年。
他们通过指出我们不知道最佳的数据表示形式来获得最佳的预测建模性能,从而阐述了本书的动机。
因此,我们可能需要系统地测试一系列表示形式,以发现最有效的方法。这与我通常推荐的经验主义方法一致,这种方法很少被讨论,但在教科书中看到它令人欣慰。
……我们通常不知道最佳的重表示预测变量来提高模型性能。 […] 我们可能需要搜索许多替代的预测变量表示形式来提高模型性能。
— 第xii页,《特征工程与选择》,2019年。
鉴于数据准备对于在数据集上获得良好性能的重要性,本书专注于强调特定的数据准备技术以及如何使用它们。
《特征工程与选择》的目标是提供重表示预测变量的工具,将这些工具置于良好的预测建模框架的背景下,并传达我们在实践中利用这些工具的经验。
— 第xii页,《特征工程与选择》,2019年。
与他们之前的书籍一样,所有示例都使用R语言,并且在这种情况下,源代码可从本书的GitHub项目中获取。
此外,与前一本书不同的是,这本书的全部内容也可以免费在线获取。
接下来,让我们仔细看看书中涵盖的主题。
想开始学习数据准备吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
书籍解析
本书分为12章
它们是
- 第1章。引言
- 第2章。说明性示例:预测缺血性中风风险
- 第3章。预测建模过程回顾
- 第4章。探索性可视化
- 第5章。编码分类预测变量
- 第6章。工程数值预测变量
- 第7章。检测交互效应
- 第8章。处理缺失数据
- 第9章。使用剖面数据
- 第10章。特征选择概述
- 第11章。贪婪搜索方法
- 第12章。全局搜索方法
让我们仔细看看每一章。
第1章。引言
引言章节很好地概述了预测建模的挑战。
它首先强调了描述性模型和预测性模型之间的重要区别。
…对特定值(如到达时间)的预测反映了一个估计问题,我们的目标不一定是理解某个趋势或事实是否真实,而是专注于最准确地确定该值。预测中的不确定性是另一个重要数量,特别是为了衡量模型生成值的可信度。
— 第1页,《特征工程与选择》,2019年。
重要的是,本章强调了数据准备的必要性,以充分利用预测模型。
模型存在不同方式表示预测变量,并且其中一些表示方式优于其他方式的想法,引出了特征工程的概念——创建数据表示以提高模型有效性的过程。
— 第3页,《特征工程与选择》,2019年。
作为引言,涵盖了许多你应该已经熟悉的が基础主题,包括
- 过拟合
- 监督和无监督程序
- 免费午餐定理
- 模型与建模过程
- 模型偏差和方差
- 经验驱动建模与实证驱动建模
- 大数据
我非常喜欢他们指出了预测建模过程的迭代性。它不是像其他地方经常讨论的那样只经过一次数据处理。
在数据建模时,几乎不存在一个模型拟合或特征集能够立即解决问题。该过程更有可能是一个反复试验的过程,以达到最佳结果。
— 第16页,《特征工程与选择》,2019年。
我也非常喜欢他们强调了输入数据的选定表示形式对模型性能的影响有多大,而且我们无法猜测给定的表示形式在多大程度上能让模型表现良好。
特征集的影响可能比不同模型的影响大得多。模型与特征之间的相互作用复杂且有些不可预测。
— 第16页,《特征工程与选择》,2019年。
第2章。说明性示例:预测缺血性中风风险
顾名思义,本章旨在通过一个实际示例使预测建模过程具体化。
作为特征工程的入门,提出了一个简化的示例,其中包含一个建模过程[…] 为了说明目的,本示例将专注于探索、分析拟合和特征工程,通过单一模型(逻辑回归)的视角。
— 第21页,《特征工程与选择》,2019年。
第3章。预测建模过程回顾
本章回顾了预测建模过程,重点关注数据准备在过程中如何以及在何处发挥作用。
它涵盖了诸如
- 衡量性能
- 数据分割
- 重采样
- 调优参数和过拟合
- 模型优化与调优
- 使用训练集比较模型
- 无过拟合的特征工程
本章的重要启示是,数据准备在过程中的应用至关重要,因为误用可能导致数据泄露和过拟合。
为了使任何重采样方案能够产生泛化到新数据的性能估计,它必须包含建模过程中所有可能显著影响模型有效性的步骤。
— 第54-55页,《特征工程与选择》,2019年。
解决方案是仅在训练数据集上拟合数据准备,然后将拟合后的变换应用于测试集和其他数据集。这是在训练/测试分割和k折交叉验证中使用预测建模的最佳实践。
为了提供稳健的方法,我们应该将自己限制在开发预处理技术列表上,仅在训练数据点的情况下进行估计,然后将这些技术应用于未来的数据(包括测试集)。
— 第55页,《特征工程与选择》,2019年。
第4章。探索性可视化
本章重点介绍在数据准备之前执行的一个重要步骤,即仔细查看数据。
作者建议使用数据可视化技术来首先理解目标变量,然后关注输入变量。然后,这些信息可以用于指导要探索的数据准备方法的类型。
当最终目的是预测响应时,探索性数据过程的第一个步骤之一是创建可视化,以帮助阐明响应的知识,然后揭示预测变量与响应之间的关系。
— 第65页,《特征工程与选择》,2019年。
第5章。编码分类预测变量
本章重点介绍分类变量的替代表示形式,这些表示形式总结了定性信息。
分类或标称预测变量是包含定性数据的预测变量。
— 第93页,《特征工程与选择》,2019年。
分类变量可能具有等级关系(序数)或没有这种关系(标称)。
简单的分类变量也可以分为有序或无序。 […] 有序和无序因子可能需要不同的方法来将嵌入的信息包含在模型中。
— 第93页,《特征工程与选择》,2019年。
这包括虚拟变量、哈希和嵌入等技术。
第6章。工程数值预测变量
本章重点介绍数值变量的替代表示形式,这些表示形式总结了定量信息。
本章的目标是开发用于将这些类型的预测变量转换为模型可以更好地利用的形式的工具。
— 第121页,《特征工程与选择》,2019年。
我们可能会在数值变量中遇到许多经过充分理解的问题,例如
- 变量的尺度不同。
- 偏态概率分布。
- 异常值或极端值。
- 双峰分布。
- 复杂的相互关系。
- 冗余信息。
有趣的是,作者们根据每种方法对输入变量的影响来组织一套技术。也就是说,该方法是作用于一个输入变量还是多个输入变量,并产生一个结果还是多个结果,例如
- 一对一
- 一对多
- 多对多
这包括数据缩放、幂变换和投影方法等多种方法。
第7章。检测交互效应
本章重点介绍一个经常被忽视的主题,即研究数据集中变量之间的交互作用。
从技术上讲,交互作用是指变量组合起来比单独考虑变量时具有更大或更小的影响。
对于许多问题,响应中的额外变化可以通过两个或多个预测变量协同工作的影响来解释。 […] 更正式地说,当两个或多个预测变量的组合效应与我们单独考虑每个效应的叠加效应不同(更小或更大)时,就称它们之间存在交互作用。
— 第157页,《特征工程与选择》,2019年。
在数据准备的背景下,这个主题经常被忽视,因为人们普遍认为预测建模中使用的学习算法将学习有助于预测目标变量的变量之间的任何相关相互关系。
第8章。处理缺失数据
本章重点介绍可用数据中缺失观测值的问题。
这是一个重要的话题,因为大多数数据都有缺失或损坏的值,如果数据集规模扩大,情况更是如此。
在真实数据集中,缺失数据并不罕见。
— 第157页,《特征工程与选择》,2019年。
在回顾了缺失数据的原因以及有助于理解数据集中缺失值范围的数据可视化之后,本章介绍了三种主要的解决方案
- 删除具有缺失值的数据。
- 编码缺失值,以便模型可以学习它们。
- 从可用数据中插补缺失值。
第9章。使用剖面数据
本章提供了用于剖面数据的数据准备方法的案例研究。
它可能命名不当,但与具有不同尺度依赖性的数据有关,例如如何在给定数据集(例如,分层结构)上使用日/周/月范围的数据进行有用的数据准备。
由于目标是进行每日预测,因此应该以一种保留潜在预测信息的方式在每日级别上汇总日内天气测量值的剖面。对于这个例子,每日特征可以包括数值数据的平均值或中值,以及可能的日内值的范围。
— 第205页,《特征工程与选择》,2019年。
恐怕我发现它完全不吸引人。但我确定它对当前从事这类数据工作的人来说是最有趣的一章。
第10章。特征选择概述
本章阐述了特征选择的必要性,即选择最相关的输入,而不是要预测的目标变量。
……有些可能与结果无关。 […] 因此,有必要为建模选择适当的预测变量。
— 第227页,《特征工程与选择》,2019年。
除了提高模型性能外,选择更少的输入变量还可以使模型更具可解释性,尽管通常是以牺牲模型技能为代价。这是预测建模中常见的权衡。
……预测性能和可解释性之间通常存在权衡,并且通常不可能同时最大化两者。
— 第227页,《特征工程与选择》,2019年。
使用三种方法组成的框架来组织特征选择方法,包括
- 内在/隐式特征选择。
- 过滤特征选择。
- 包装特征选择。
特征选择方法分为三类:内在(或隐式)方法、过滤方法和包装方法。
— 第228页,《特征工程与选择》,2019年。
其余两章也侧重于特征选择。
第11章。贪婪搜索方法
本章重点介绍一次评估一个特征,然后选择得分高的特征子集的方法。
这包括计算输入与目标之间统计关系强度的方法,以及通过迭代删除数据集中的特征并在每一步评估模型的方法。
识别潜在预测重要特征的一种简单方法是单独评估每个特征。 […] 简单的过滤方法非常适合查找单个预测变量。但是,此方法并未考虑多个特征组合在一起的影响。
— 第255页,《特征工程与选择》,2019年。
第12章。全局搜索方法
本章重点介绍全局搜索算法,这些算法基于拟合这些特征的模型性能来测试不同的特征子集。
全局搜索方法是探索预测变量空间和识别与响应最优相关的预测变量子集的有效工具。 […] 尽管全局搜索方法通常在查找良好的特征集方面很有效,但它们在计算上是昂贵的。
— 第281页,《特征工程与选择》,2019年。
这包括众所周知的全局随机搜索算法,如模拟退火和遗传算法。
关于本书的最终想法
我认为这是急需的关于数据准备的教科书。
我还认为,如果你是一名认真的机器学习从业者,你需要这本书。
如果你熟悉R和Python的机器学习,这本书强调了Python/scikit-learn等库在追赶R/caret生态系统方面还有多远。
在数据准备方面,我认为示例演示不如演示算法那样有用。也许只是我个人的偏好。考虑到每个数据集在特征数量、类型和组成方面的差异,在标准数据集上演示数据准备并不是一个有用的教学辅助工具。
我更希望能够更系统地介绍原始数据中可能出现的、与建模相关的问题,以及每种数据准备方法如何解决这些问题。例如,我希望有一个包含各种方法的详细目录,说明它们的工作原理以及何时使用它们,而不是关于每种方法的文字。
无论如何,这只是我为了让这本书变得更好或提供另一种视角而提出的建议。毫无疑问,这本书是必备的。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
- 特征工程和选择:预测模型的实用方法, 2019.
- 应用预测建模, 2013.
- 《特征工程与选择》,官方网站.
- 《特征工程与选择》,GitHub.
总结
在本文中,您了解了我对《特征工程与选择》一书关于机器学习数据准备主题的评论和解析。
您读过这本书吗?
请在下面的评论中告诉我您的想法。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
Jason,感谢您的简要介绍。
不客气。
全局搜索方法章节读起来会很有趣!
是的!
嗨,Jason,
谢谢老板,
我非常享受您通过邮件发给我的资料和信息。
愿上帝赐予您更多的智慧。
谢谢。
Jason,非常感谢您提供详尽而简洁的评论,而且恰逢其时,我的意思是,我大约一周前订购了这本书,但还没有收到,与此同时
我已经在网上阅读了前三章。
但恕我直言,如果您已经具备一些机器学习/深度学习/数据科学或监督学习的经验,那么这些材料就很容易理解/遵循。对于初学者来说可能就不那么容易了。
您的简洁评论可能会对初次阅读本书的读者有很大帮助。因此,非常感谢您的评论,这对我来说是一种概述(对我来说尤其恰逢其时)。
与此同时,我想提醒您这里有什么不对劲
第6章。工程数值预测变量
本章重点介绍总结定性信息的数值变量的替代表示形式。
我认为“定性”一词应替换为“定量”。
再次感谢
你好 Jason,
我同意您关于使用不同的、合适的数据集来演示“数据准备”和“数据建模”步骤的观点,在向初学者授课时,我也是这样做的。
但我认为作者选择了相同的数据集来例示这两个概念,这可能是因为在实际项目中,我们只使用一个数据集(我的意思是,我们不会在一个原始数据集上进行准备/预处理,然后在另一个原始数据集上进行建模)。所以我想他们的观点可能是这个。
无论如何,我还在等待我的个人副本的到来。
再次感谢您及时对本书进行评论。
很棒的观点。
谢谢,我很高兴听到这个。这是一本很棒的书,当它到来时,你会有很多乐趣!
感谢您指出这个拼写错误,已修复。
非常感谢 Jason Brownlee,您做得很好。
谢谢,很高兴它能帮到你!
嗨,Jason,
我对您的声明感到非常惊讶,即 Scikit-Learn 需要追赶。这没有拼写错误,对吧?
“....这本书强调了 Python/scikit-learn 等库在追赶 R/caret 生态系统方面还有多远。”
来自德国的问候,
弗朗哥
我坚持我的说法。
Sklearn 的发展非常缓慢,十年来,R 中有数百种方法尚未添加到 sklearn 中。
非常非常有趣……感谢您的回复 Jason!
您不同意吗?
多年前,我在 Python 中学习了机器学习(我读过您的许多书),但感觉 R 的机器学习比 Scikit-Learn 复杂得多……您的评论促使我更深入地研究 R 的机器学习。
啊,我明白了,谢谢。
R 的功能更丰富,但你说得对,它很混乱。代码质量参差不齐,平均而言很难使用。
sklearn (大部分)非常干净/简单,而且“就是能用”。我仍然推荐 Python。
对 sklearn 的评价很到位。
谢谢。