关于特征工程

来源:互联网 发布:mysql要学多久 编辑:程序博客网 时间:2024/04/30 02:42

什么是特征工程,怎么做特征工程,怎么做好特征工程

特征工程是一个包含内容很多的主题,也被认为是成功应用机器学习的一个很重要的环节。

为了写这篇文章,我深入和广泛的阅读了相关材料,并且对他们进行了整合。

这篇文章主要说明了以下问题:什么是特征工程?特征工程解决了什么问题?为什么特征工程对机器学习很重要?如何进行特征工程?哪些团队对这个问题研究的比较好,以及在哪里你能学到更多相关知识。如果你只阅读一篇关于特征工程的文章,那我希望会是这一篇。

“特征工程是一个看起来不值得在任何论文或者书籍中被探讨的一个主题。但是他却对机器学习的成功与否起着至关重要的作用。机器学习算法很多都是由于建立一个学习器能够理解的工程化特征而获得成功的。”——ScottLocklinin “Neglected machine learning ideas”

一、特征工程要解决的问题

如果你的目标是从预测模型中获得最好的结果,你需要尽可能多的利用你所拥有的材料。这包括使用一个能获得最好结果的算法,以及从数据中获得尽可能多的特征供你的算法使用。 我们如何充分利用数据来建立预测模型?——这就是特征工程要研究的问题。实际上,机器学习算法的成功依赖于如何表达数据。(Mohammad Pezeshki, answer to What are some general tips on feature selection and engineering that every data scientist should know?”)

二、特征工程的重要性

数据中的特征对预测的模型和获得的结果有着直接的影响。可以这样认为,特征选择和准备越好,获得的结果也就越好。这是正确的,但也是有误导的。预测的结果其实取决于许多相关的属性:比如说模型的选择,能获得的数据,以及你准备好的特征。升职问题的框架和度量标准也会对你的结果产生影响。

你需要的特征要能够描述数据的潜在结构。

好的特征意味着更好的灵活性:

你可以选择较差的模型依然获得好的结果。大多数的模型可以从数据中挑选出好的结果。灵活的特征可以使你用更简单的模型使得算法运行更快,更容易去理解以及容易调试。

好的特征意味着更简单的模型:

对于好的工程化的特征,你可以选择较差的参数,依然获得最好的结果。这样就不需要费很大功夫来选择正确的模型和最优化的参数。有了好的特征,你就离问题的本质更近,以及获得对你拥有的数据的更好表达,然后更好的解决实质的问题。

好的特征意味着更好的结果:

kaggle的比赛中我们使用了标准的算法。我们把大多数的时间都花在了特征工程上。— Xavier Conort, on Q&A with Xavier Conort” on winning the Flight Quest challenge on Kaggle

三、什么是特征工程

下面是我对特征工程的一个定义:

特征工程是将原始的数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能在未知数据中获得更好的模型准确率。

定义中几个关键的问题:

1.分类性能的度量?(RMSEAUC?)

2.问题的框架?(分类还是回归)

3.使用的预测模型?(SVM 决策树  贝叶斯)

4.对原始数据做了什么样的处理?(采样,清洗,格式化)

特征工程就是人为的设计输入x的形式的过程。— Tomasz Malisiewicz, answer to What is feature engineering?

特征工程是一个表达问题

机器学习算法通过样本数据中学习到一个解决方案来解决问题。在这篇文章中,对特征工程提出了以下的问题:什么是对样本数据的最好的表达?这个问题很深。机器学习甚至人工智能归根到底都是表达问题。这是一个很难的话题。你必须把输入转化成算法可以理解的东西。

特征工程是一门艺术

特征工程的专家提倡实践。并且学习其他在实践中表现好的方法。有的机器学习工程取得好的效果,有的机器学习工程失败了。造成差异的最主要因素就是特征的使用、

四、特征工程的几个子问题

很多人把特征工程看做了一件事情。比如说我过去一段时间都把特征工程等同于特征构建。在做特征工程的时候我要提醒自己,我在做特征工程。如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。但是,达到这个目的有很多途径。在这章中,我们探讨以下方法,以及相关的子问题。其实,每一个问题都能是一篇很有深度的文章。毕竟,这些问题都是一个大而且重要的领域在实践中和研究中。

特征:对于建模任务有用的属性

表格式的数据是用行来表示一个实例,列来表示属性和变量。每一个属性可以是一个特征。特征与属性的不同之处在于,特征可以表达更多的跟问题上下文有关的内容。特征是一个对于问题建模有意义的属性。我使用有意义(有用的)来区别特征和属性。我认为如果一个特征没有意义是不会被认为是特征的。如果一个特征对问题没有影响,那就不是这个问题的一部分。

在计算机视觉领域,一幅图像是一个对象,但是一个特征可能是图像中的一行。在自然语言处理中每一个文档或者一条微博是一个对象,一个短语或者单词的计数可以作为特征。在语音识别中,一段声音是一个实例,一个特征可能是单个词或者发音。

特征重要性:估计一个特征的有用程度

这可以是一个选择特征的有用线索。特征可以被分配一个分值,然后按照这个分值排序。那些具有较高得分的特征可以被选出来包含在训练集中。同时剩余的就可以被忽略。

特征重要性得分可以帮助你抽取或者构建新的特征。挑选那些相似但是不同的特征作为有用的特征。

如果一个特征与目标变量是高度相关的,那么这个特征被认为是重要的。相关系数和其他单变量的方法(每一个变量被认为是相互独立的)是比较通用的方法。

更复杂的方法是通过预测模型算法来对特征进行评分。这些预测模型内部有这样的特征选择机制,比如MARS,随机森林,梯度提升机。这些模型也可以得出变量的重要性。

特征提取:自动化的从原始数据中构建新的特征

一些样本如果直接使用预测模型算法可能在原始数据中有太多的列被建模。特征提取是一个自动化的降维过程。使得特征太多的样本被建模的维数降低。对于表格型的数据,可以使用PCA和无监督的方法。对于图像数据,可以使用线边检测。对于不同的领域有着不同的数字信号处理方法。

特征提取的关键在于这些方法是自动进行的,然后解决那些难以管理的高维数据。

特征选择:从大量的特征中选择少量的有用特征

不是所有的特征都是平等的。

那些与问题不相关的属性需要被删除。还有一些特征可以比其他特征更重要。也有的特征跟其他的特征是冗余的。特征选择自动地选择对于问题最重要的特征的一个子集。特征选择算法可以利用得分排序的方法选择特征。如相关性和其他特征重要性手段。

更高级的方法通过试错来搜索特征子集。这些方法通过建立模型,评价模型,然后自动的获得对于目标最具预测能力的特征子集。还有一些算法能得到特征选择的副产品。比如说逐步回归就是能够自动的选择特征来构建模型。

正则化的方法比如lasso和岭回归可以作为特征选择的算法。他们在构建模型的过程中删去或者减小不重要特征的贡献。(An Introduction to feature selection

特征构建:从原始数据中人造新特征

特征重要性和特征选择可以告诉你特征的效用。你需要人造新的特征出来。这要求你在样本数据上花费大量的时间并且思考问题的本质,数据的结构,以及怎么最好的在预测模型中利用他们。对于表格型数据,通常对特征进行混合聚集,组合或者分解分割来创造新的特征。对于文本数据通常需要设计特定的与问题相关的文档指标。对于图像数据通常需要花费大量时间指示过滤器发现相关的特征。

这部分就是人们通常认为的特征工程最具艺术性的部分。这是一个漫长的部分,需要耗费大量的脑力和时间,并可以产生巨大的不同。

特征工程和特征选择不是相互排斥的,他们都是很有用的部分。我认为特征工程可能更为重要,因为我们不能自动化的进行这一步。— Robert Neuhaus, answer to Which do you think improves accuracy more, feature selection or feature engineering?

特征学习:自动化的识别和利用原始数据中的特征

我们可以避免在从原始数据构造和提取特征的时候人工指示构造方法吗?

表达学习和特征学习试图实现这个目标。

深度学习在这个领域获得了一定的成功。例如:自动编码器和有限波尔茨曼机。他们用无监督或者半监督的方法学习特征的抽象表达。这些工作对语音识别,图像识别,实体识别等领域具有很大促进作用。

我们不认为可以有自动化的特征提取和构造方法。也就是我们可能永远不会有自动化的特征工程。

抽象的表达可能会被自动的处理好。但是,你不能理解他所学到的东西,因为这个过程是一个黑箱。他们不能够告诉你怎么创造更多表现好的相似的并且不同的特征。对于未来相似的问题仍然没有很好的解决方法。

不过他依然是一个迷人的现代特征工程研究领域。

五、特征工程的处理过程

特征工程需要在机器学习的应用中加深理解。

机器学习的处理过程:

应用机器学习的过程包含许多步骤。从问题的定义,到数据的选择和准备,以及模型的准备,模型的评价和调参,最后是结果的表达。这个过程中与我们的话题相关的部分可以用下面几步描述:

1.选择数据:整合数据,规范化到数据集中,集中数据

2.预处理数据:格式化,清理,采样

3.转换数据:特征工程要做的事情

4.建模数据:建立模型,评价模型,调整模型

从上面可以看出,在特征工程之前,我们需要把数据中不合理的地方修改成相同的格式。有时候我们需要追踪数据的新视角。比如说:我们可能有一个属性是求和的结果。我们可能需要的是某个时间段的和,而不是全部的和,因此我们需要追踪数据的产生过程,发现真实的原始数据,并且作为特征。

我们看到紧随着特征工程就是建模。这表明,我们做特征工程需要与模型,表现度量相结合。同时也表明,我们需要留下那些适合建模的数据。比如说在最后一步规范化和标准化数据。这看起来是一个预处理的步骤,但实际上他帮助我们意识到对于一个有效模型需要什么样的最终形态。

特征工程的迭代过程:

知道特征工程的地位,我们就明确特征工程不是一个孤立的过程。特征工程是一个根据模型评价一次又一次的迭代过程。这个过程主要包括以下几个步骤:

1、头脑风暴:深入了解问题,观察数据,研究特征工程和其他相关问题。

2、设计特征:这个依赖于具体的问题,但是你可能使用自动化的特征提取方式,或者人工构造,或者二者结合。

3、选择特征:使用不同的特征重要性评价指标以及不同的特征选择方法。

4、评价模型:在未知数据集上测试模型性能

你需要认真考虑并且设计在未知数据集上的测试方式。这是对你特征工程过程最好的评价方式。

六、特征工程的例子

下面的内容可以让我们对特征工程有更具体的认识。在这一部分中我们考虑表格型数据。我们讨论了一些人工特征构造的实例。

通用的特征工程方法:

1.分解类别变量:当你有一个属性变量,比如说物体颜色。物体颜色有红色,蓝色和未知三种情况。未知看起来是特殊的,但实际上对于模型来说,只是一种颜色选择。你可以创建一个二分变量:是否有颜色。如果是红色或者蓝色就是1,否则就是0.进一步你可以对每一种可能的值创建一个变量:is_redis_blueis_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,可以重构为6kg289g

具体的特征工程实例:

一个很好的学习特征工程的地方是各种机器学习竞赛。比赛通常使用真实数据集。而且通常在结尾会有一个方法和途径的总结。从中可以学习到有效的现实世界中的机器学习处理方法。

Feature Engineering and Classifier Ensemble for KDD Cup 2010”.

特征工程的更多资源:

书籍:1.Feature Extraction, Construction and Selection: A Data Mining Perspective

2.Feature Extraction: Foundations and Applications (I like this book)

3.Feature Extraction & Image Processing for Computer Vision, Third Edition

4.Feature Selection for Knowledge Discovery and Data Mining

5.Computational Methods of Feature Selection

论文和演示文稿:

 

 

 

原文地址:http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/

 

 

 

 

 

0 0
原创粉丝点击