为什么要素工程有效?


20

最近,我了解到,为机器学习问题找到更好解决方案的方法之一是创建功能。例如,可以通过汇总两个功能来做到这一点。

例如,我们拥有某种英雄的“攻击”和“防御”两个特征。然后,我们创建一个称为“总计”的附加功能,这是“攻击”和“防御”的总和。现在让我感到奇怪的是,即使是强硬的“攻击”和“防御”也几乎与“总数”紧密相关,我们仍然可以获得有用的信息。

这背后的数学是什么?还是我推理错了?

另外,对于像kNN这样的分类器来说,“总数”总是大于“攻击”或“防御”,这不是问题吗?因此,即使经过标准化处理,我们仍将具有包含不同范围值的特征?


总而言之,将两个特征求和的做法当然并不代表“特征工程”。
xji

Answers:


21

您质疑标题,内容似乎与我不符。如果您使用的是线性模型,那么除了攻击和防御外,还要添加一个总功能,这会使情况变得更糟。

首先,我将回答为什么要素工程通常会起作用。

一张图片胜过千言万语。此图可能会告诉您一些有关要素工程的知识以及其工作原理(图片来源):

在此处输入图片说明

  • 笛卡尔坐标中的数据更为复杂,并且很难编写规则/建立模型以对两种类型进行分类。

  • 极坐标中的数据非常容易:我们可以在上编写一个简单规则来对两种类型进行分类。[R

这告诉我们数据的表示非常重要。在某些空间中,执行某些任务比在其他空间中容易得多。

在这里,我回答您的示例中提到的问题(攻击和防御总计)

实际上,此攻防示例中提到的功能工程不适用于许多模型,例如线性模型,并且会引起一些问题。请参阅多重共线性。另一方面,这样的特征工程可以在其他模型上工作,例如决策树/随机森林。有关详细信息,请参见@Imran的答案。

因此,答案是,根据您使用的模型,某些功能工程将对某些模型有所帮助,而对其他模型则无济于事。


该和不必与加数共线。例如,请参阅我的答案。
Kodiologist

15

我们正在使用的模型类型在学习现有功能的某些组合时可能不是很有效。

例如,请考虑您的例子,其中的特点是ad,和我们使用的是决策树来预测,恰好是一个二元结果,如果和,如果。0一种+d<01个一种+d0

由于决策树只能沿各个要素轴分割,因此我们的模型最终将尝试构建适合线的阶梯,如下所示:

在此处输入图片说明

如您所见,这将不能完美地推广到新数据。我们可以在真实决策线上方有一个圆圈,该圆圈位于我们的决策边界之下,反之亦然。

但是,如果我们将其添加a+d为功能,那么对于决策树而言,问题就变得微不足道了。它可以忽略个人ad功能,并通过一个a+d<0决策树桩解决问题。

在此处输入图片说明

但是,如果您使用线性回归,则您的模型将完全能够学习而无需添加其他功能。一种+d

总之,某些附加功能可能会有所帮助,具体取决于您所使用的模型的类型,在设计功能时,应谨慎考虑数据和模型。


1
这就是重点。功能选择和模型选择必须同时考虑。在不考虑使用的模型类型的情况下尝试进行特征选择是一个常见的陷阱。
Imran

1
例如,如果你试图用线性回归同样的事情,然后ad就足够了,增加a+d的功能不会有所作为。
伊姆兰(Imran),

我已经更新了答案,以使其更加明确。
伊兰(Imran)

1
此外,跨对角线分割需要一分割。您绘制的楼梯“用尽”了七个裂口。
累计

3

如果类似的构造特征total与同一模型中的其他特征没有强相关性,则仍然可以在预测上有用。total尤其不需要与attack或紧密相关defense。例如,如果attack为(8,0,4)和defense为(1,9,6),则totalwith 的相关性attack为0,totalwith 的相关性defense为。1个7

另外,对于像kNN这样的分类器来说,“总数”总是大于“攻击”或“防御”,这不是问题吗?因此,即使经过标准化处理,我们仍将具有包含不同范围值的特征?

如果要标准化预测变量,则应在所有预测变量构建好之后再进行。


1
这是真的吗?当然,在简单的线性模型中,事实并非如此:矩阵[attack, defense, total]当然是2级。我可以想象,在类似惩罚性线性模型的情况下,矩阵可以有所作为,但这是基于直觉而不是完全通过直觉进行的。您能解释为什么如果attackdefense不高度相关total(当attackdefense高度负相关时发生),为什么total有帮助?
Cliff AB

1
@CliffAB事后看来,我在这里有点不高兴。我说的很对,一个构造的特征在与其他预测变量不强相关且total不需要与attack或强烈相关时很有用defense,但是由于线性关系,您永远不会在同一模型中使用两个预测变量及其总和依赖,意味着之间的相关性强一些两三个。
Kodiologist

1

为了给出一个一般性的答案,在大多数情况下,要素工程就是要从数据中提取有意义的要素,因此,如果您向模型提供更多信息,则其性能显然会更好。假设您的数据由电子邮件地址组成,格式为“ name.surname@domain.country-code”。如果您在模型中按原样使用它们,则每个人的特征都会是一封独特的电子邮件,因此这并不能告诉我们太多。它只会告诉我们,一封电子邮件可能属于另一个人,然后又属于另一个人。通过特征工程,您可以从这些地址中提取有关可能的性别(姓名),家庭背景和种族(姓氏),国籍(域)等信息,它可以为您提供很多信息,不是吗?


1

您想用“功能” 总数完成什么?如果您只是比较英雄,那么攻击防御可能会更有用。如果您发现构建的类型(以进攻为导向还是以防御为导向)是有用的,那么攻击 / 防御可能会更有用。也许MyAttack - YourDefense更为有用。

这实际上取决于您的目标,归结为您为问题注入了其他知识,以便您可以获得更好的答案。您可能听说过有人乱扔对数平方比率以及各种方式来制作特征,但最重要的是,“有用”取决于手头的任务,涉及将您拥有的数据转换为决策所依据的域更简单。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.