特征工程(FeatureEngineering)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特征⼯程(FeatureEngineering)
⼀、什么是特征⼯程?
"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那⾥得到了启发,因为特征⼯程把特征之间、特征与⽬标变量之间的潜在关系统统挖掘并完整地展⽰出来了。
所以,对模型来讲就很容易理解了,效果⾃然不错了!相当于你把⼀个难题已经分解的很透彻了,即使⼩学⽣也能很好的理解并给出答案了。
三、特征⼯程的处理过程。
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):。