什么是特征工程,怎么做特征工程,如何做好特征工程?
特征工程是将原始的数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能在未知数据中获得更好的模型准确率。
更加简单的来说就是在原始数据当中寻找深层次的数据特征能够更好地表示问题的数据。
特征工程是一个包含内容很多的主题,也被认为是成功应用机器学习的一个很重要的环节。
为了写这篇文章,我深入和广泛的阅读了相关材料,并且对他们进行了梳理。
这篇文章主要说明了以下问题:什么是特征工程?特征工程解决了什么问题?为什么特征工程对机器学习很重要?如何进行特征工程?哪里对这个问题研究的比较好,以及在哪里你能学到更多相关知识。
如果你只阅读一篇关于特征工程的文章,那我希望会是这一篇。我也希望阅读完之后给本文一个赞。
特征工程是一个看起来不值得在任何论文或者书籍中被探讨的一个主题。但是它却对机器学习的成功与否起着至关重要的作用。机器学习算法很多都是由于建立一个学习器能够理解的工程化的特征而获得成功。
— Scott Locklin Neglected machine learning ideas
1. 特征工程要解决的问题
如果目标是从预测模型中获得最好的结果,我们需要尽可能多的利用现在手头上的数据。
这包括使用一个能获得最好结果的算法,以及从数据中获得尽可能多的特征供你的算法使用。
我们如何充分利用数据来建立预测模型?
这就是特征工程需要研究的问题。
实际上,机器学习算法的成功依赖于如何表达数据。》
— Mohammad Pezeshki What are some general tips on feature selection and engineering that every data scientist should know?
2.特征工程的重要性
数据中的特征对预测的模型和获得的结果有着直接的影响。
可以这样认为,特征选择和准备越好,获得的结果也就越好。这是正确的,但也是有误导的。
预测的结果其实取决于许多相关的属性:比如说模型的选择、能获得的数据、准备好的特征,就连对问题的建模方法和目标测量的精度也会对预测的结果造成影响。因此我们的结果是有很多不同独立的因素和相互依赖的因素所决定的。
因为上面的问题,我们需要的特征要能够描述数据的潜在结构,也就是需要找到数据的内在意义。
好的特征有更好的灵活性
你可以选择较差的模型依然获得较好的结果。大多数的模型可以从数据中挑选出好的结果。灵活的特征可以使你用更简单的模型使得运行更快、更容易去理解以及容易调试和维护,这对于算法那的处理、模型的选择是更加客观与直接的。
好的特征意味着模型可以更简单
对于好的工程化的特征,你可以选择较差的参数,依然获得最好的结果。这样就不需要费很大功夫来选择正确的模型和最优化的参数。有了好的特征,你就离问题的本质更近,以及获得对你拥有的数据的更好表达,然后更好的解决实质的问题。
好的特征意味着更好的结果
在kaggle中我们使用的算法都是标准的算法,起码在python库还有其他库已经建立好的算法。因此很多时候会把大多数的时间都花在了提取特征上。
— Xavier Conort Q&A with Xavier Conort
3.什么是特征工程
下面是我对特征工程的一个定义:
特征工程是将原始的数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能在未知数据中获得更好的模型准确率。
更加简单的来说就是在原始数据当中寻找深层次的数据特征能够更好地表示问题的数据。
几个关键的问题:
- 测量数据的指标(RMSE?AUC?)
- 问题的类型(分类?回归?)
- 使用的预测模型?(SVM?决策树?贝叶斯?)
- 怎么样选择和处理原始数据(采样,清洗,格式化)
特征工程就是人为的设计输入x的形式的过程。
— Tomasz Malisiewicz, answer to “What is feature engineering?”
特征工程是一个表达问题
机器学习算法通过样本数据中学习到一个解决方案来解决问题。
在这篇文章中,对特征工程提出了以下的问题:什么是对样本数据的最好的表达?
这个问题很难回答。机器学习甚至人工智能归根到底都是表达问题。这是一个很难的话题。你必须把输入转化成算法可以理解的东西。
你需要把你的输入转变成为算法可以理解的东西
— Shayne Miel What is the intuitive explanation of feature engineering in machine learning?
特征工程是一门艺术
像工程设计是一门艺术、编程是一门艺术、医学是一门艺术一样,特征提取也是一门艺术。
数据可变性非常大,根据不同的时间也会不一样。通过实践,你可以知道什么时候使用什么样的处理流程。跟工程,艺术,医学一样很多时候都是需要经验的。
通过实际的动作操作可以更好滴掌握特征工程,通过实际的操作去了解什么时候去使用不同的特征提取方法。
有的机器学习工程取得好的效果,有的机器学习工程失败了。造成差异的最主要因素就是特征的使用。
– Pedro Domingos A Few Useful Things to Know about Machine Learning
4. 特征工程的几个问题
很多人把特征工程看做了一件事情。
比如说我过去一段时间都把特征工程等同于特征构建。
在做特征工程的时候我要提醒自己,我在做特征工程。如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。但是,达到这个目的有很多途径。
在这章中,我们探讨以下方法,以及相关的子问题。其实,每一个问题都能是一篇很有深度的文章。
特征:对于模型有意义的属性
简单的我们从单一个特征开始。
表格式的数据是用行来表示一个实例,列来表示属性和变量。每一个属性可以是一个特征。
特征与属性的不同之处在于,特征可以表达更多的跟问题上下文有关的内容。特征是一个对于问题建模有意义的属性。
我使用有意义来区别特征和属性。我认为如果一个特征没有意义是不会被认为是特征的。因此所使用到的特征必须有意义。
在计算机视觉领域,一幅图像是一个对象,但是一个特征可能是图像中的一行。在自然语言处理中每一个文档或者一条微博是一个对象,一个短语或者单词的计数可以作为特征。在语音识别中,一段声音是一个实例,一个特征可能是单个词或者发音。
特征的重要性:估计一个特征的有用程度
我们可以初略地估计到特征的有效性。
这可以是一个选择特征的有用线索。特征可以被分配一个分值,然后按照这个分值排序。那些具有较高得分的特征可以被选出来包含在训练集中。同时剩余的就可以被忽略。
特征重要性得分可以帮助你抽取或者构建新的特征。挑选那些相似但是不同的特征作为有用的特征。
如果一个特征与目标变量是高度相关的,那么这个特征被认为是重要的。相关系数和其他单变量的方法(每一个变量被认为是相互独立的)是比较通用的方法。
更复杂的方法是通过预测模型算法来对特征进行评分。这些预测模型内部有这样的特征选择机制,比如MARS,随机森林,梯度提升机。这些模型也可以得出变量的重要性。
特征提取:自动化的从原始数据中构建新的特征
一些样本在原始数据中有太多特征列值,这样对于直接使用预测模型算法不太有效。
特征提取是一个自动化的降维过程,最后这些数据可以变成一个更小的数据集让模型可以处理。
对于表格型的数据,可以使用PCA和无监督聚类算法。对于图像数据,可以使用Canny那样的边缘检测算法。对于不同的领域有着不同的数字信号处理方法。
特征提取的关键在于这些方法是自动进行的,然后解决那些难以管理的高维数据。
特征选择:从大量的特征中选择少量的有用特征
不是所有的特征都是平等的。
那些与问题不相关的属性需要被删除。还有一些特征可以比其他特征更重要。也有的特征跟其他的特征是冗余的。
特征选择自动地选择对于问题最重要的特征的一个子集。特征选择算法可以利用得分排序的方法选择特征。如相关性和其他特征重要性手段。
更高级的方法通过试错或者训练来搜索特征子集。这些方法通过建立模型,评价模型,然后自动的获得对于目标最具预测能力的特征子集。还有一些算法能得到特征选择的副产品。比如说逐步回归就是能够自动的选择特征来构建模型。
正则化的方法比如LASSO和边界回归可以作为特征选择的算法。他们在构建模型的过程中删去或者减小不重要的特征。
特征选择 An Introduction to Feature Selection
特征构建:从原始数据中创造新特征
特征重要性和特征选择可以告诉你特征的效用。你需要人造新的特征出来。这要求你在样本数据上花费大量的时间并且思考问题的本质,数据的结构,以及怎么最好的在预测模型中利用他们。对于表格型数据,通常对特征进行混合聚集,组合或者分解分割来创造新的特征。对于文本数据通常需要设计特定的与问题相关的文档指标。对于图像数据通常需要花费大量时间指示过滤器发现相关的特征。
这部分就是人们通常认为的特征工程最具艺术性的部分。这是一个漫长的部分,需要耗费大量的脑力和时间,并可以产生巨大的作用。
特征
特征工程和特征选择不是相互排斥的,他们都是很有用的部分。我认为特征工程可能更为重要,因为我们不能自动化的进行这一步。
— Robert Neuhaus, answer to “Which do you think improves accuracy more, feature selection or feature engineering?”
特征学习:自动化的识别和利用原始数据中的特征
我们可以避免在从原始数据构造和提取特征的时候人工干预吗?
表达学习和特征学习就是为了自动化识别和利用原始数据特征而出现的。
深度学习在这个领域获得了一定的成功。例如:自动编码器和有限波尔茨曼机。他们用无监督或者半监督的方法学习特征的抽象表达。这些工作对语音识别,图像识别,实体识别等领域具有很大促进作用。
我们不认为可以有自动化的特征提取和构造方法。也就是我们可能永远不会有自动化的特征工程。
抽象的表达特征现在还没能够很好地自动化实现,因为我们不能理解自动所学到的东西,因为整个操作过程对于用户来说是一个黑箱子。它不能够告诉我们怎么创造更多表现好的相似的并且不同的特征。对于未来相似的问题仍然没有很好的解决方法。
不过这依然是一个迷人的现代特征工程研究领域。
5. 特征工程的处理过程
特征工程需要在机器学习的应用中加深理解。
机器学习的处理过程:
应用机器学习的过程包括很多步骤:
从问题的定义,到数据的选择和准备,以及模型的准备,模型的评价和调参,最后是结果的表达。
这个过程中与我们的话题相关的部分可以用下面几步描述:
1.选择数据:整合数据,规范化到数据集中,集中数据
2.预处理数据:格式化,清理,采样
3.转换数据:特征工程要做的事情
4.数据建模:建立模型,评价模型,调整模型
从上面可以看出,在特征工程之前,我们需要把数据中不合理的地方修改成相同的格式。有时候我们需要从新的角度去看待数据。举个栗子:我们可能有一个属性是求和的结果。我们可能需要的是某个时间段的和,而不是全部的和,因此我们需要追踪数据的产生过程,发现真实的原始数据,并且作为特征。
从上面可以看到特征工程之后就是数据建模了。
这表明,我们做特征工程需要与模型相交互,并留下那些适合建模的数据。比如说在最后一步进行数据的规范化和标准化。这个步骤看起来像是预处理过程的步骤,但实际上能够帮助我们了解到对于一个有效模型需要什么样的数据形态。
特征工程的迭代过程:
知道特征工程的地位,我们就明确特征工程不是一个孤立的过程。特征工程是一个根据模型评价不断迭代过程。这个过程主要包括以下几个步骤:
1、头脑风暴:深入了解问题,观察数据,研究特征工程和其他相关问题。
2、设计特征:这个依赖于具体的问题,但是你可能使用自动化的特征提取方式,或者人为构造数据。
3、选择特征:使用不同的特征重要性评价指标以及不同的特征选择方法。
4、评价模型:在未知数据集上测试模型性能。
认真考虑并且设计在未知数据集上的测试方式。这是对你特征工程过程最好的评价方式。
6、特征工程的例子
让我们对特征工程更具体的概念。
在本节中,我们将考虑类似于Excel里面的表格数据。当我听到“特征工程是非常重要的”时候,类似于Excel这样的表格数据是我最熟悉的,因为会进场用到。
那么哪一种数据的类型格式是最好的呢?在我们实际操作之前都是未知的哦,因为我们需要去真正使用这些数据运行算法然后去评估算法的性能指标。
通用的特征工程方法:
1.分解类别变量
当你有一个属性变量,比如说物体颜色。物体颜色有红色,蓝色和未知三种情况。未知看起来是特殊的,但实际上对于模型来说,只是一种颜色选择。你可以创建一个二分变量:是否有颜色。如果是红色或者蓝色就是1,否则就是0.进一步你可以对每一种可能的值创建一个变量:is_red,is_blue,is_unknown。这些额外的特征可以用来代替原来的特征。
2.分解日期变量
比如你发现在一天中的时间和别的属性有关系,你可以创建一个新的数值型特征Hour_of_Day。这可能会对一个回归模型是有帮助的。你也可以创建一个新的序数变量part_of_day。这个变量有四种取值,早上,中午,下午,深夜。这对于决策树可能会是有效的。同样可以利用相似的方法处理季节和月份信息。
3.重构数值变量
你的数据中很有可能拥有数值型变量。这些可以通过消除相关结构来更好的重建。This may be a transform into a new unit or the decomposition of a rate into time and amount components.对于重量,距离,时间等数据,线性的转换对于回归是有用的。以及其他的一些规范化手段。对于单位为gram的重量,你可以用kg作为单位。也可以把kg部分和gram部分分开作为两个变量。如6.289kg,可以重构为6kg和289g。
7.具体的特征工程实例
一个很好的学习特征工程的地方是各种机器学习竞赛。比赛通常使用真实数据集。而且通常在结尾会有一个方法和途径的总结。从中可以学习到有效的现实世界中的机器学习处理方法。
“Feature Engineering and Classifier Ensemble for KDD Cup 2010”.
8.特征工程相关资源
我们在本文中涵盖了很多引用到的文章,我希望你对特征工程有更多的了解,例如它在哪里适合,怎么去使用它等等。
这真的是我们旅程的开始。我们需要练习特征工程、学习特征工程并成为一个伟大的工程师。
本节提供了一些可能帮助您完成旅程的资源。
书籍
- Feature Extraction, Construction and Selection: A Data Mining Perspective
- Feature Extraction: Foundations and Applications
- Feature Extraction & Image Processing for Computer Vision, Third Edition
- Feature Selection for Knowledge Discovery and Data Mining
- Computational Methods of Feature Selection
论文和PPT
特征工程是一个很难的话题,因为更多的与实际工程应用有关,更多的是经验问题。
同样,在特征选择的书中有大量的特征提取论文和章节,但是特征工程不多。另外,特征工程在软件工程中也有定义,与我们的讨论无关。
以下是一些一般相关的文章:
- JMLR Special Issue on Variable and Feature Selection
- Feature Engineering
- Feature Engineering and Selection
- Feature Engineering Studio
- Feature Engineering