机器学习的特征工程的具体实例

110 阅读6分钟

Feature Engineering is the Biggest Factor of a Successful ML Model

什么是特征工程?

特征工程是指从你现有的特征中创建新的输入特征。一般来说,你可以把数据清理看作是一个减法的过程,而特征工程则是一个加法的过程。

所有的数据科学家都应该掌握新特征工程的过程,主要有三个原因。

  1. 你可以隔离和突出关键信息,这有助于你的算法 "专注 "于重要的东西。
  2. 你可以引入你自己的领域专业知识。
  3. 最重要的是,一旦你理解了特征工程的 "词汇",你就可以引入其他人的领域专长了。

在本指南中,我们将介绍几种启发式方法来帮助激发新的想法。当然,这不会是所有特征工程的详尽汇编,其中有无限的可能性。好消息是,随着经验的积累,这项技能自然会得到提高。

Feature Engineering

灌输领域知识

你通常可以通过挖掘你(或他人)在该领域的专业知识来设计出信息丰富的功能。试着想一想你可能想要隔离的具体信息,或者把重点放在上面。在这里,作为一个数据科学家,你有很大的 "创意自由 "和 "技能表达"。

例如,假设你正在研究一个美国房地产模型,使用的是一个可以追溯到2000年的历史价格数据集。那么,对于这种情况,重要的是要记住,次贷住房危机就发生在这个时间范围内。

Domain Knowledge and Feature Engineering

Zillow房屋价值(2007 - 2017)

如果你怀疑价格会受到影响,你可以为该时期的交易创建一个指标变量。指标变量是二进制变量,可以是0 ,也可以是1 。它们 "表明 "一个观察值是否符合某个条件,它们对于隔离关键属性非常有用。

正如你可能怀疑的那样,"领域知识 "是非常广泛和开放的。在某些时候,你会被卡住或用尽你的想法。这就是接下来的几个步骤的作用。这些是一些具体的启发式方法,可以帮助激发更多的灵感。

创建互动功能

这些启发式方法中的第一个是检查你是否可以创建任何有意义的互动功能。这些是两个或多个特征的组合。

顺便说一下,在某些情况下,"互动项 "必须是两个变量之间的产物。在我们的背景下,交互特征可以是两个特征之间的乘积总和差异

一个一般的建议是,看看每一对特征,然后问自己,"我是否可以以任何方式组合这些信息,使其更加有用?"

Interaction Features - Joining Forces

例子(房地产)

我们知道,附近学校的质量和数量会影响住房价格。那么,我们怎样才能确保我们的ML模型能够捕捉到这一点呢?

  • 假设我们在数据集中已经有了一个特征,叫做'num_schools' (学校数量的特征,即一个房产周围5英里内的学校数量。
  • 假设我们也有一个特征'中位数'(median_school即这些学校的质量得分中位数。

然而,我们可能会怀疑,真正重要的是有许多学校选择,但前提是它们是好的。

  • 那么,为了捕捉这种互动,我们可以简单地创建一个新的特征 'school_score'= "num_schools" x "median_school

这个新的'school_score'只有在这两个条件都满足的情况下才会有一个高值(相对而言)。

合并稀疏类

我们要考虑的下一个启发式方法是对稀疏类进行分组。稀疏类(在分类特征中)是指那些总观测值非常少的类。对于某些机器学习算法来说,它们可能是有问题的,会导致模型的过度拟合。

每个类需要多少观测值并没有正式的规则。这也取决于你的数据集的大小和你拥有的其他特征的数量。

然而,作为一个经验法则,我们建议合并类,直到每个类至少有50个观测值。就像任何经验法则一样,把它作为一个指导原则(实际上不是一个规则)。

让我们看一下房地产的例子。

Before Grouping Sparse Classes

首先,我们可以对类似的类进行分组。在上图中,exterior_walls特征有几个相当相似的类。

  • 我们可能想把'Wood Siding','Wood Shingle', 和'Wood' 分成一个类。事实上,我们就把它们都标为'Wood'

接下来,我们可以把剩下的稀疏类归为一个"其他 "类,即使已经有一个 "其他 "类。

  • 我们将'Concrete Block','Stucco','Masonry','Other', 和'Asbestos shingle' 分成一个单独的'Other'

下面是合并相似类和其他类后的类分布情况。

After Grouping Sparse Classes

在合并稀疏类之后,我们有更少的独特类,但每个类有更多的观察值。通常情况下,一个眼球测试就足以决定你是否要将某些类组合在一起。

添加虚拟变量

大多数机器学习算法不能直接处理分类特征。具体来说,它们不能处理文本值。因此,我们需要为我们的分类特征创建虚拟变量

虚拟变量是一组二进制(0或1)变量,每个变量代表一个分类特征的一个类别。你所代表的信息是完全一样的,但这种数字表示法可以让你通过算法的技术要求。

在上面的例子中,在对稀疏类进行分组后,我们剩下了8个类,这就转化为8个虚拟变量。

Dummy Variables

(第3列描述了一个有砖墙的观察实例)

删除未使用的特征

最后,我们应该从数据集中删除未使用的或多余的特征。

未使用的特征是那些没有意义的特征,可以传递给我们的机器学习算法。例子包括。

  • ID列
  • 在预测时不会出现的特征
  • 其他文本描述

冗余的特征通常是指那些已经被你在特征工程中添加的其他特征所取代的特征。例如,如果你将一个数字特征分组为一个分类特征,你通常可以通过移除 "分散注意力的 "原始特征来提高模型性能。

分析性基础表(ABT)

在完成数据清理和特征工程之后,你将把你的原始数据集转化为一个分析基表(ABT)。我们称它为 "ABT",因为它是你要建立模型的基础。

Ping Pong Table (Not ABT)

"谁能请亚历克斯离开乒乓球桌?我们在等着玩呢!"

作为最后的提示:不是所有你的工程师的功能都需要成为赢家。事实上,你经常会发现,其中许多功能并不能改善你的模型。这很好,因为一个高预测性的特征可以弥补十个哑巴。