我经常看到人们基于机器学习问题的现有功能来创建新功能。例如,在这里:https : //triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/人们已经将一个人的家庭规模视为一项新功能,基于现有的功能,包括兄弟姐妹和父母的数量。
但是,这有什么意义呢?我不明白为什么创建相关的新功能很有用。独自执行此操作不是算法的工作吗?
我经常看到人们基于机器学习问题的现有功能来创建新功能。例如,在这里:https : //triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/人们已经将一个人的家庭规模视为一项新功能,基于现有的功能,包括兄弟姐妹和父母的数量。
但是,这有什么意义呢?我不明白为什么创建相关的新功能很有用。独自执行此操作不是算法的工作吗?
Answers:
用于说明此问题的最简单示例是XOR问题(请参见下图)。想象一下,您得到的数据包含和坐标,以及要预测的二进制类。您可能希望机器学习算法本身就能找到正确的决策边界,但是如果生成了附加特征,那么问题就变得微不足道了,因为为您提供了几乎完美的分类决策准则,并且您仅使用了简单的算法!
因此,尽管在很多情况下您可以期望算法找到解决方案,但是通过特征工程,您可以简化问题。简单的问题更容易解决,并且需要的算法也更少。简单的算法通常更健壮,结果通常更可解释,它们更具可伸缩性(较少的计算资源,训练时间等)且可移植。在伦敦PyData会议上的Vincent D. Warmerdam精彩演讲中,您可以找到更多示例和解释。
此外,不要相信机器学习营销人员会告诉您的一切。在大多数情况下,算法不会“自己学习”。您通常只有有限的时间,资源,计算能力,并且数据通常只有有限的大小且嘈杂,这都无济于事。
更极端的是,您可以将数据作为实验结果的手写笔记的照片提供,然后将其传递给复杂的神经网络。它首先会学会识别图片上的数据,然后学会理解并做出预测。为此,您将需要一台功能强大的计算机和大量时间来训练和调整模型,并且由于使用了复杂的神经网络,因此需要大量数据。由于您不需要所有字符识别,因此以计算机可读格式(如数字表)提供数据可以极大地简化问题。您可以将特征工程视为下一步,以这种方式转换数据以创建有意义的功能,因此您自己的算法几乎不需要弄清楚。打个比方,就像您想读一本外语书籍一样,因此您需要先学习该语言,而不是阅读以您所理解的语言翻译的书。
在Titanic数据示例中,您的算法将需要弄清楚对家庭成员进行求和才有意义,以获得“家庭规模”功能(是的,我在此处进行个性化设置)。对于人类来说,这是显而易见的功能,但是如果您仅将数据视为数字的某些列,就不会很明显。如果您不知道将哪些列与其他列一起考虑时有意义,则算法可以通过尝试使用这些列的每种可能组合来找出答案。当然,我们有巧妙的方法来执行此操作,但是,如果立即将信息提供给算法,则容易得多。
好吧,如果您打算使用一个简单的线性分类器,那么生成新功能(这些功能是现有功能的非线性功能)是非常有意义的,特别是如果您的领域知识表明您所得到的功能将是有意义的和有益的。请注意,线性分类器不能考虑那些复杂的功能,除非您明确提供它们。
理想情况下,如果使用足够强大的非线性分类算法,则应该能够创建一个决策边界,该边界将考虑输入要素的任意非线性变换(如果它们有助于分类)。但是,实际上,大多数非线性分类器只是查看某种类型的转换。例如,多项式内核SVM将考虑要素之间的多项式相互作用,但是也许可以通过应用其他类型的转换来创建更多信息的要素...
简而言之,如果领域知识表明手工制作的非线性特征组合可能有用,则可以将其添加到现有特征集中。
的确,某些机器学习模型具有处理非线性和变量之间相互作用的能力,但是,根据情况,我认为这是有必要的三个原因。
如果仅给您两个功能,和。的简单线性模型无法找到对目标变量进行分类的任何方法。因此,相反,您需要新的四次特征来捕获非线性:。x 2 y = x 0 + c 1 x 1 + c 2 x 2 y = x 0 + c 1 x 2 1 + c 2 x 2 2
如果您事先知道某些功能(从业务知识或经验中获得),则可能有助于创建这些功能以加快模型的运行速度并使模型变得容易。例如,在您的“泰坦尼克号”数据示例中,如果您使用的是决策树分类模型。如果您知道老年女士(年龄和性别)更有可能生存,那么通过创建一个捕获信息的功能,您的树可以对新变量进行拆分,而不是对两个变量进行拆分。如果您事先知道该功能很重要,则可能会加快计算时间。
在现实世界中,您将不会像Kaggle提供的那样获得单个数据集。相反,您可以从各地获取信息。例如,如果您要预测像Amazon这样的在线零售公司的客户流失情况,则需要客户人口统计信息,购买交易信息。您需要从不同的来源生成很多功能,在这种情况下,您会发现可以从事务级别获得/汇总很多有用的功能。就像Andrew Ng所说:通常,进行特征工程的能力定义了机器学习项目的成败。