特征工程(Feature Engineering)

时间:2022-08-23 20:13:00

一、什么是特征工程?

"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):