一、什么是特征工程?

"Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data."

简而言之,就是将原始数据转换为模型更容易理解的数据类型,从而提高模型的预测准确率。我认为包含三个方面:特征处理、特征选择、特征生成

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的地位

二、特征工程的作用?

1)Better features means flexibility。伸缩性比较好,可以让你使用不太复杂的模型,运行速度更快,更容易理解,更容易维护。

2)Better features means simpler models. 就是说你即使没有选择最正确的模型和最优化的参数,依然能得到相当满意的效果。省去了大量去研究模型的时间。

3)Better features means better results。

为什么特征工程能产生这么好的效果呢?我从Jason Brownlee那里得到了启发,因为特征工程把特征之间、特征与目标变量之间的潜在关系统统挖掘并完整地展示出来了。所以,对模型来讲就很容易理解了,效果自然不错了!相当于你把一个难题已经分解的很透彻了,即使小学生也能很好的理解并给出答案了。

Jason Brownlee的主页:http://machinelearningmastery.com

三、特征工程的处理过程。

  • Remove unnecessary features-去掉无用的特征
  • Remove redundant features-去掉冗余的特征,如:共线特征
  • Create new features-创造新特征

    1)Combine existing features
    2)Transform features
    3)Use features from the context
    4)  Integrate external sources

  • Modify feature types

    e.g. from binary to numeric

  • Modify feature values-修改特征的值,如特征的极大值、异常值、缺失值

四、特征工程举例

This is might be a foreign idea, so here are three examples:

  • Categorical: You have a categorical attribute that had the values [red, green blue], you could split that into 3 binary attributes of red, green and blue and give each instance a 1 or 0 value for each.
  • Real: You have a real valued quantity that has values ranging from 0 to 1000. You could create 10 binary attributes, each representing a bin of values (0-99 for bin 1, 100-199 for bin 2, etc.) and assign each instance a binary value (1/0) for the bins.

常见做法 :

1. 单一变量的基础转换:x, x^2,sqrt x ,log x, 缩放

2. 如果变量的分布是长尾的,应用Box-Cox转换,包括:对数转换、平方根转换、倒数转换、平方根后再取倒数、幂转换。

3. 你也可以检查残差(Residuals)或是log-odds(针对线性模型),分析是否是强非线性。

4. 对于基数比较大的数据,对于分类变量,创造一个表示每种类别发生频率的特征是很有用的。当然,也可以用占总量的比率或是百分比来表示这些类别。

5. 对变量的每一个可能取值,估计目标变量的平均数,用结果当做创造的特征。

6. 创造一个有目标变量比率的特征。

7. 选出最重要的两个变量,并计算他们相互之间、以及与其它变量之间的二阶交叉作用并放入模型中,比较由此产生的模型结果与最初的线性模型的结果。

8. 如果你想要的解决方案更平滑,你可以应用径向基函数核(Kadial Basis function kernel) 。这就相当应用一个平滑转换。

9. 如果你觉得你需要协变量(Covariates ),你可以应用多项式核,或者明确添加它们的协变量。

10.高基数特征:在预处理阶段,通过out-of-fold平均转换成数值变量。

两个变量组合而成的特征转换

以下为一些常见的由两个变量组合而成的特征转换:

11.加法转换

12. 相对于基数的差值

13. 乘法转换:交互效果

14. 除法转换:缩放/归一化

15. 对数值型特征设定阈值以获取其布尔值

16.笛卡儿积变换

17. 特征向量积:所有特征的向量积

试想一个特征A,它有两个可能的值:{ A1,A2 } 。假设B是一个具有两种可能性{ B1,B2 }的另一特征。那么, A和B之间的向量积(我们称之为AB)将采取以下值之一: { (A1 , B1),(A1 , B2),(A2 , B1),(A2 , B2) } 。你基本上可以赋予这些”组合”你喜欢的任何名称。但要记住,每个组合都表示一个由A和B的相应值包含的信息之间的协同作用。

18. 归一化/数据标准化变换

在机器学习算法中提出的隐含假设(对朴素贝叶斯而言,在某种程度上是显性假设)之一是:该特征服从正态分布。不过,有时我们可能会发现该特征不遵循正态分布,而是对数正态分布。那么在这种情况下常见的手段之一是取特征值的对数(即表现出对数正态分布的那些特征值),使得它展现出正态分布。如果在使用中的算法做出了正态分布的隐含/显性假设的话,则这种转化,即将一个服从对数正态分布的特征转化为正态分布,可以帮助改善该算法的性能。

19. 分位数分级转换 (Quantile Binning Transformation)

20. 白化数据 (Whitening the Data)

21. 窗体压缩化 (Windowing)

如果所有的点都分布在时间轴上,那么在同一个窗口里的先前的点往往包含丰富的信息。

22. 最小-最大归一化:不一定保留顺序

23. S型/正切/对数转换 (Sigmoid / Tanh / Log Transformations)

24. 用特殊方法处理0:对于计数特征有可能很重要

25. 去相关性/转换变量

26. 重构数量

27.将不频繁的分类变量划分到新的/独立的类别中。

28.按顺序应用一系列转换。

29.独特的编码方式

30.靶值率编码 (Target rate encoding)

31.哈希技巧 (Hash Trick)

常见的多个变量的特征转换

以下为一些常见的多个变量的特征转换:

32.主成分分析 (PCA)

33. 模型集成

34. 压缩感知 (Compressed Sensing)

35.“猜平均值”或是“猜通过变量X分段后的平均值”

36. 处理映射(hack projection):

特征工程(Feature Engineering)的更多相关文章

  1. 机器学习-特征工程-Feature generation 和 Feature selection

    概述:上节咱们说了特征工程是机器学习的一个核心内容.然后咱们已经学习了特征工程中的基础内容,分别是missing value handling和categorical data encoding的一些 ...

  2. 特征工程(Feature Enginnering)学习记要

     最近学习特征工程(Feature Enginnering)的相关技术,主要包含两块:特征选取(Feature Selection)和特征抓取(Feature Extraction).这里记录一些要点 ...

  3. AI学习---特征工程【特征抽取、特征预处理、特征降维】

    学习框架 特征工程(Feature Engineering) 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 什么是特征工程: 帮助我们使得算法性能更好发挥性能而已 sklearn主 ...

  4. 想搞机器学习,不会特征工程?你TM逗我那!

    原文:http://dataunion.org/20276.html 作者:JasonDing1354 引言 在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而 ...

  5. 2022年Python顶级自动化特征工程框架⛵

    作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...

  6. 使用sklearn做单机特征工程(Performing Feature Engineering Using sklearn)

    本文转载自使用sklearn做单机特征工程 目录 目录 特征工程是什么 数据预处理 1 无量纲化 11 标准化 12 区间缩放法 13 标准化与归一化的区别 2 对定量特征二值化 3 对定性特征哑编码 ...

  7. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  8. 特征工程 vs. 特征提取

    “特征工程”这个华丽的术语,它以尽可能容易地使模型达到良好性能的方式,来确保你的预测因子被编码到模型中.例如,如果你有一个日期字段作为一个预测因子,并且它在周末与平日的响应上有着很大的不同,那么以这种 ...

  9. 《转发》特征工程——categorical特征 和 continuous特征

    from http://breezedeus.github.io/2014/11/15/breezedeus-feature-processing.html 请您移步原文观看,本文只供自己学习使用 连 ...

随机推荐

  1. 将sublime添加到右键菜单

    sublime text 添加到鼠标右键功能: 把以下内容复制并保存到文件,重命名为:sublime_addright.reg,然后双击就可以了. (注意:需要把下面代码中的Sublime的安装目录( ...

  2. docker中crontab无法运行

    yum install -y crontabssed -ri 's/.*pam_loginuid.so/#&/' /etc/pam.d/crond   vi /etc/pam.d/crond ...

  3. Visual C++中对运行时库的支持

    原文地址:http://blog.csdn.net/wqvbjhc/article/details/6612099 一.什么是C运行时库 1)C运行时库就是 C run-time library,是 ...

  4. 【Python】python和json数据相互转换,json读取和写入,repr和eval()使用

    python数据转换json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import jso ...

  5. Qt快速入门学习笔记(基础篇)

    本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&am ...

  6. BZOJ 1022 小约翰的游戏(anti-sg)

    这是个anti-sg问题,套用sj定理即可解. SJ定理 对于任意一个Anti-SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件: 1.游戏的SG值为0且所有子游戏SG值均不超过1. ...

  7. BZOJ4310 跳蚤(后缀数组+二分答案)

    注意到答案一定是原串的子串,于是考虑造出SA,二分答案是第几小的子串.第k小子串很容易在SA上求出.之后计算使他成为最大子串至少要在几个位置切割,对每个字典序比答案大的后缀,找到所有合法切割位置(求l ...

  8. P1315 观光公交

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  9. [Leetcode] powx n x的n次方

    Implement pow(x, n). 题意:计算x的次方 思路:这题的思路和sqrt的类似,向二分靠近.例如求4^5,我们可以这样求:res=4.4*4^4.就是将每次在res的基础上乘以x本身, ...

  10. 【题解】Casting Spells LA 4975 UVa 1470 双倍回文 SDOI 2011 BZOJ 2342 Manacher

    首先要吐槽LRJ,书上给的算法标签是“有难度,需要结合其他数据结构”,学完Manacher才发现几乎一裸题 题目的意思是问原串中有多少个wwRwwR这样的子串,其中wR表示w的反串 比较容易看出来,w ...