特征工程是一个非正式的话题,但是绝对知道并同意是应用机器学习成功的关键。
在创造这本指南,我走得很宽,深,并合成了所有的材料,我可以。
你会发现什么特征工程,它解决了什么问题,为什么它重要,如何工程师的功能,谁做得很好,在哪里你可以去了解更多,擅长它。
如果你阅读一篇关于特征工程的文章,我想要它是这一个。
特征工程是另一个话题,似乎不值得任何审查论文或书籍,甚至书中的章节,但它是ML成功绝对至关重要。 […]机器学习的大部分成功实际上是学习者可以理解的工程特征的成功。
- Scott Locklin,在“被忽略的机器学习的想法”
特征工程解决的问题
特征工程很难。
Vik Nanda,保留部分权利
当你的目标是从预测模型中获得最好的结果时,你需要充分利用你所拥有的。
这包括从您使用的算法获得最好的结果。它还涉及获得最佳的数据为您的算法使用。
如何充分利用您的数据进行预测建模?
这是特征工程的过程和实践解决的问题。
实际上,所有机器学习算法的成功取决于您如何呈现数据。
- Mohammad Pezeshki,回答“关于特征选择和工程的一些一般提示,每个数据科学家应该知道?
特征工程的重要性
数据中的特征将直接影响您使用的预测模型和可以实现的结果。
你可以说:你准备和选择的功能越好,你将实现的结果越好。这是真的,但它也误导。
您实现的结果是您选择的模型,您可用的数据和您准备的功能的因素。即使你的框架的问题和客观的措施,你用来估计准确性发挥作用。您的结果取决于许多相互依赖的属性。
您需要描述数据中固有结构的伟大功能。
更好的功能意味着灵活性。
你可以选择“错误的模型”(不是最佳的),仍然会得到好的结果。大多数模型可以在数据中获得良好的结构。良好功能的灵活性将允许您使用不太复杂的模型,运行速度更快,更易于理解和更易于维护。这是非常可取的。
更好的功能意味着更简单的模型。
通过精心设计的功能,您可以选择“错误的参数”(不是最佳的),并且仍然获得好的结果,原因很多。你不需要努力工作,选择正确的模型和最优化的参数。
有了良好的功能,你更接近潜在的问题,并表示所有可用的数据,并可以用来最好地描述这个基本问题。
更好的功能意味着更好的结果。
我们使用的算法是非常标准的Kagglers。 […]我们花了大部分的努力在特征工程。
- Xavier Conort,关于“与Xavier Conort的问答”,赢得了Kaggle的Flight Quest挑战赛
什么是特征工程?
下面是我如何定义特征工程:
特征工程是将原始数据转换为更好地表示潜在问题的特征到预测模型的过程,导致对未知数据的改进的模型精度。
您可以在此定义中查看依赖关系:
您选择的绩效指标(RMSE?AUC?)
问题的框架(分类?回归?)
您使用的预测模型(SVM?)
您选择并准备的原始数据(样本?格式化?清洁?)
特征工程是手动设计输入x应该是什么
- Tomasz Malisiewicz,回答“什么是特征工程?
特征工程是一种表示问题
机器学习算法从样本数据中学习一个问题的解决方案。
在这种情况下,特征工程问:什么是样本数据的最好的表示,以学习解决你的问题?
它很深。在机器学习中做得很好,即使在人工智能中通常回到表示问题。这是很难的东西,也许是不可知的(或最好棘手的)知道使用的最佳表示法,先验。
你必须把你的输入转换成算法可以理解的东西
- Shayne Miel,回答“机器学习中特征工程的直观解释是什么?
特征工程是一种艺术
它是一种艺术,像工程是一门艺术,像编程是一门艺术,就像医学是一门艺术。
有明确的程序是有条理的,可证明的和理解的。
数据是一个变量,每次都是不同的。你善于决定使用哪些程序,什么时候,通过实践。通过实证学徒。像工程,像编程,像医学,像机器学习一般。
特征工程的掌握是用手练习,并研究其他做得好的人是练习。
…一些机器学习项目成功,一些失败。有什么区别?轻松最重要的因素是使用的功能。
- Pedro Domingos,在“关于机器学习的一些有用的事情”(PDF)
特征工程的子问题
将特征工程视为一件事是很常见的。
例如,对我来说很长一段时间,特征工程是特征构造。
我会想到自己“我现在正在做特征工程”,我将追求“如何分解或聚合原始数据以更好地描述基本问题”的问题?“目标是正确的,但该方法是一个很多。
在本节中,我们将探讨这些方法以及它们想要解决的特定子问题。每个都可以是一个深入的文章,因为他们是大和重要的实践和研究领域。
特征:对您的建模任务有用的属性
让我们从数据开始,什么是功能。
表格数据是根据观察值或由变量或属性(列)组成的实例(行)来描述的。属性可以是特征。
与特性分离的特征的想法在问题的上下文中更有意义。功能是对您的问题有用或有意义的属性。它是观察的一个重要部分,用于了解正在建模的问题的结构。
我使用“有意义”来区分属性和功能。有些可能不会。我认为没有这样的东西作为一个无意义的功能。如果一个特性对问题没有影响,它不是问题的一部分。
在计算机视觉中,图像是观察,但是特征可以是图像中的线。在自然语言处理中,文档或鸣叫可以是观察,并且短语或字数可以是特征。在语音识别中,话语可以是观察,但是特征可以是单个单词或音素。
特征重要性:特征的有用性的估计
您可以客观地估计要素的有用性。
这可以有助于作为选择功能的前提。特征被分配分数,然后可以通过它们的分数来排名。可以选择具有最高分数的那些特征包括在训练数据集中,而可以忽略那些剩余的特征。
功能重要性分数还可以为您提供可用于提取或构建新功能的信息,这些信息与估计有用的功能相似但不同。
如果特征与因变量(预测的事物)高度相关,则该特征可能是重要的。相关系数和其他单变量(每个属性都独立考虑)方法是常用的方法。
更复杂的预测建模算法在构建其模型时在内部执行特征重要性和选择。一些例子包括MARS,随机森林和渐变增强机器。这些模型还可以报告在模型准备过程中确定的可变重要性。
特征提取:从原始数据自动构建新特征
一些观察结果在它们的原始状态中太庞大,不能通过预测建模算法直接建模。
常见的示例包括图像,音频和文本数据,但可以很容易地包括具有数百万个属性的表格数据。
特征提取是一种自动将这些类型的观察的维数降低到可以建模的小得多的集合的过程。
对于表格数据,这可能包括投影方法,如主成分分析和无监督聚类方法。对于图像数据,这可能包括线或边缘检测。取决于域,图像,视频和音频观察自身提供许多相同类型的DSP方法。
特征提取的关键是该方法是自动的(尽管可能需要从更简单的方法设计和构造)并且解决难以控制的高维数据的问题,最典型地用于以数字格式存储的模拟观察。
特征选择:从许多特征到几个有用的
并非所有功能都创建相等。
那些与问题无关的属性需要删除。将有一些功能将比其他人更重要的模型精度。还将存在在其他特征的上下文中将是冗余的特征。
特征选择通过自动选择对问题最有用的子集来解决这些问题。
特征选择算法可以使用评分方法来排序和选择特征,例如相关性或其他特征重要性方法。
更高级的方法可以通过试错法搜索特征的子集,自动创建和评估模型以追求客观上最高预测性的子特征组。
还有一些方法可以烘焙特征选择或将其作为模型的副作用。逐步回归是自动执行特征选择作为模型构建过程的一部分的算法的示例。
正则化方法如LASSO和岭回归也可以被认为是具有特征选择的算法,因为它们主动寻求去除或折扣特征作为模型构建过程的一部分的贡献。
阅读更多在帖子:特性选择的介绍。
特征构造:从原始数据手动构建新特征
最好的结果来自你,从业者,制作的功能。
特征重要性和选择可以告诉你关于特征的客观效用,但是这些特征必须来自某处。
您需要手动创建它们。这需要花费大量时间与实际样本数据(不是聚合),并考虑问题的基本形式,数据中的结构以及如何最好地将它们暴露给预测建模算法。
使用表格数据,它通常意味着聚合或组合要素的创建新功能,分解或拆分功能以创建新功能的混合。
对于文本数据,它通常意味着设计与问题相关的文档或上下文特定指标。对于图像数据,它通常意味着巨大的时间规定自动过滤器选择相关的结构。
这是特征工程的一部分,经常作为一种艺术形式被讨论,这一部分被认为是竞争机器学习中的重要性并被标志为差异化。
它是手动的,它是慢的,它需要大量的人类大脑的力量,它有很大的区别。
特征工程和特征选择不是相互排斥的。它们都很有用。我想说,功能工程更重要,虽然,特别是因为你不能真正实现自动化。
- 罗伯特·诺伊豪斯,回答“你认为提高精度更多,功能选择或特征工程?
特征学习:自动识别和使用原始数据中的特征
我们可以避免手动加载规定如何从原始数据构造或提取特征?
表征学习或特征学习是实现这一目标的努力。
现代深度学习方法在这一领域取得了一些成功,例如自动编码器和受限制的波尔兹曼机器。它们已经被自动地以无监督或半监督的方式显示,学习特征(压缩形式)的抽象表示,这反过来支持诸如语音识别,图像分类等领域中的最先进的结果,对象识别等领域。
我们没有自动特征提取或构建,但是,我们可能永远不会有自动特征工程。
抽象表示是自动准备的,但是你不能理解和利用已经学到的东西,除非是黑盒子的。他们不能(仍然或容易地)通知你和如何创建更多类似和不同的功能,如那些做得很好,对于给定的问题或未来的类似问题的过程。获得的技能被困住。
然而,它是令人着迷,令人兴奋和特征工程的一个重要和现代的一部分。
特征工程过程
特征工程在应用机器学习的更广泛的过程中被最好地理解。
你需要这个上下文。
机器学习的过程
应用机器学习的过程(缺乏一个更好的名字),在广泛的画笔意义涉及大量的活动。前面是问题定义,接下来是数据选择和准备,中间是模型准备,评估和调整,最后是结果的呈现。
过程描述,如数据挖掘和KDD有助于更好地了解任务和子任务。你可以选择和选择和短语的过程你喜欢的方式。我之前谈过很多。
与我们关于特征工程的讨论相关的图片是该过程的前中间。它可能看起来像下面这样:
(这里之前的任务…)
选择数据:集成数据,将其反标准化到数据集中,一起收集。
预处理数据:格式化,清理,采样,以便您可以使用它。
变换数据:特征工程师在这里发生。
模型数据:创建模型,评估它们并调整它们。
(任务此后…)
从原始状态到适合建模的状态的“变换数据”的传统概念是特征工程所适用的。变换数据和特征工程实际上可能是同义词。
这张照片在几个方面有帮助。
你可以看到,在特征工程之前,我们将数据变成一种我们甚至可以看到的格式,在此之前,我们正在将数据库中的数据整理和反规范化为某种中心图像。
我们可以,并且应该回去通过这些步骤,因为我们确定新的观点的数据。
例如,我们可能有一个属性是一个聚合字段,如和。而不是单个总和,我们可以决定创建特征来描述数量的时间间隔,如季节。我们需要在过程中通过预处理甚至选择数据向后退,以访问“真正的原始数据”并创建此功能。
我们可以看到,特征工程之后是建模。
它建议与建模的强烈互动,提醒我们设计功能的相互作用,并测试它们与我们的测试工具和最终性能测量的层面。
这也表明我们可能需要以适合于所选择的建模算法的形式留下数据,例如将特征归一化或标准化作为最后一步。这听起来像一个预处理步骤,它可能是,但它有助于我们考虑在有效的建模之前需要什么类型的完成触摸数据。
特征工程的迭代过程
知道特征工程在何处适用于应用机器学习过程的上下文中强调它不是独立的。
这是一个迭代的过程,与数据选择和模型评估,一次又一次,直到我们用完了我们的问题的时间。
该过程可能如下所示:
头脑风暴的特点:真正遇到的问题,看看很多数据,学习特征工程对其他问题,看看你可以偷。
设计特点:取决于你的问题,但你可以使用自动特征提取,手动特征构建和两者的混合。
选择要素:使用不同的要素重要性刻画和要素选择方法来准备一个或多个“视图”供您的模型操作。
评估模型:使用所选的特征估计未知数据的模型精度。
你需要一个明确定义的问题,以便你知道什么时候停止这个过程,并继续尝试其他模型,其他模型配置,模型集合等。一旦你高涨了想法或精确度的三角洲,后来有了收益。
你需要一个经过考虑和设计的测试工具,用于客观地估计未知数据上的模型技能。这将是你的特征工程过程的唯一的措施,你必须相信它不浪费你的时间。
特征工程的一般例子
让我们使特征工程的概念更具体。
在本节中,我们将考虑表格数据,如您可能在Excel电子表格中。我们将看一些你可能想考虑的自己的问题的手动功能构造的例子。
当我听到“特征工程至关重要”时,这是我想到的特征工程的类型。这是我熟悉和实践的最常见的形式。
哪些是最好的?你不能在手前知道。您必须尝试它们并评估结果以实现您的算法和性能度量。
分解分类属性
假设您有一个分类属性,如“Item_Color”,可以是红色,蓝色或未知。
未知可能是特殊的,但对于模型,它看起来像另一个颜色选择。更好地暴露此信息可能是有益的。
您可以创建一个名为“Has_Color”的新二进制特征,并在项目具有颜色时为其分配值“1”,当颜色未知时为其分配“0”。
更进一步,您可以为Item_Color具有的每个值创建一个二进制特征。这将是三个二进制属性:Is_Red,Is_Blue和Is_Unknown。
这些额外的特性可以用来代替Item_Color特性(如果你想尝试一个更简单的线性模型)或者除此之外(如果你想从决策树中获得更多的东西)。
分解日期时间
日期时间包含很多信息,这对于模型来说很难利用它的本机形式,例如ISO 8601(即2014-09-20T20:45:40Z)。
如果您怀疑时间和其他属性之间存在关系,则可以将日期时间分解为组成部分,这可以允许模型发现和利用这些关系。
例如,您可能怀疑一天中的时间与其他属性之间存在关系。
您可以为小时创建一个名为Hour_of_Day的新数值特征,这可能有助于回归模型。
您可以创建一个名为Part_Of_Day的新序数功能,具有4个值早上,中午,下午,夜晚,任何与您认为相关的时间边界。这对于决策树可能是有用的。
您可以使用类似的方法来选择一周中的时间关系,时间关系和季节性的各种结构。
日期时间结构丰富,如果您怀疑您的数据有时间依赖性,请抽出时间,挑逗他们。
重写数值数量
您的数据很可能包含数量,可以重新整理以更好地公开相关结构。这可以是变换成新单元或将速率分解成时间和量分量。
你可能有一个数量,如重量,距离或时间。线性变换可用于回归和其他依赖于尺度的方法。
例如,您可以有以克为单位的Item_Weight,值为6289.您可以创建一个新的要素,以千克为单位的这个数量为6.289,或者圆形公斤,如6.如果域是运送数据,也许公斤是足够或更有用较少噪声)为Item_Weight的精度。
Item_Weight可以分为两个特征:Item_Weight_Kilograms和Item_Weight_Remainder_Grams,示例值分别为6和289。
可能有领域知识,重量大于4的项目的税率较高。该魔法域号可用于创建一个新的二进制特征Item_Above_4kg,值为“1”,我们的例子为6289克。
您还可以将一个数量存储为间隔的汇率或汇总数量。例如,Num_Customer_Purchases在一年内聚合。
在这种情况下,您可能想要返回到数据收集步骤,并创建除此聚合之外的新功能,并尝试在购买中显示更多时间结构,例如季节性。例如,可以创建以下新的二进制特征:Purchases_Summer,Purchases_Fall,Purchases_Winter和Purchases_Spring。
特征工程的具体例子
一个研究特征工程实例的好地方是从竞争机器学习的结果。
比赛通常使用来自现实问题域的数据。在比赛结束时需要写出方法和方法。这些写作给了有效的现实世界机器学习过程和方法的宝贵见解。
在本节中,我们将介绍一些关注特征工程的有趣的和值得注意的竞争后写作的例子。
2010年KDD杯预测学生测试绩效
KDD杯是一个机器学习竞赛,每年为ACM知识发现和数据挖掘会议特别兴趣小组的与会者举行。
2010年,竞赛的焦点是模拟学生学习的问题。提供了关于代数问题的学生结果语料库,用于预测这些学生的未来表现。
比赛的获胜者是台湾大学的一群学生和学者。他们的方法在论文“Feature Engineering and Classifier Ensemble for KDD Cup 2010”中有所描述。
纸质学分特征工程作为赢得的关键方法。特征工程以创建数百万个二进制特征为代价简化了问题的结构。简单的结构允许团队使用高性能但非常简单的线性方法来实现获胜的预测模型。
本文提供了如何将问题结构中的具体时间和其他非线性简化为简单复合二进制指标的细节。
这是一个极端的和有启发性的例子,可以用简单的属性分解。
预测遗产健康奖的患者入院
遗产健康奖是一个300万美元奖,授予该团队,谁可以最好地预测哪些病人将在明年进入医院。
该奖项每年都获得里程碑奖,其中顶级团队将被授予奖励,并且他们的流程和方法公开。
我记得阅读在三个里程碑的第一个发布的论文,并对特征工程的数量印象深刻。
具体来说,Phil Brierley,David Vogel和Randy Axelrod的论文“第一轮里程碑奖:我们如何做到 - 团队市场制造者”。大多数比赛涉及大量的特征工程,但它让我很清楚这篇文章阐明了这一点。
本文提供了构建属性所需的属性和SQL的表。
本文通过简单的分解给出了一些伟大的现实世界中的特征工程的例子。有很多计数,最小值,最大值,大量二进制属性和离散的数值属性。非常简单的方法用于伟大的效果。
更多关于特征工程的资源
我们在本文中涵盖了很多理由,我希望你对特征工程是什么,它在哪里适合,以及如何做到更多的欣赏。
这真的是你旅程的开始。你需要练习特征工程,你需要学习特征工程的伟大的从业者。
本节提供了一些可能帮助您完成旅程的资源。
图书
我找不到任何关于这个话题的书籍或书籍章节。
然而,有一些伟大的书特征提取。如果您正在使用模拟观察(如图像,视频,声音或文本)的数字表示,那么您可能希望深入了解一些特征提取文献。
特征提取,构造和选择:数据挖掘视角
特征提取:基础和应用程序(我喜欢这本书)
特征提取和图像处理计算机视觉,第三版
还有很多关于特征选择的书。如果您要通过删除冗余或不相关的功能来减少功能,请深入了解功能选择。
知识发现和数据挖掘的特征选择
特征选择的计算方法
论文和幻灯片
这是一个艰难的话题。
同样,在特征选择的书中有大量的特征提取论文和章节,但是特征工程不多。另外,特征工程在软件工程中也有意义,与我们的讨论无关。
以下是一些一般相关的文章:
JMLR关于变量和特征选择的特殊问题
以下是一些一般相关和有趣的幻灯片:
特征工程(PDF),知识发现和数据挖掘1,知识技术研究所Roman Kern
特征工程与选择(PDF),CS 294:实用机器学习,伯克利
特征工程工作室,课程讲座幻灯片和材料,哥伦比亚
特征工程(PDF),Leon Bottou,Princeton
链接
有博客文章在这里和那里。最有用的链接是通过问题工作的教程,并清楚地表达有意的特征工程。
以下是一些通常有趣的链接:
特征工程:如何在泰坦尼克号竞赛(Kaggle的入门竞赛)上执行特征工程。有更多的数据变得比特征工程,但它仍然有启发。
IPython Notebook,Guibing Guo,致力于解释特征工程。有点凌乱,但值得一扫
http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/