有的时候,已有的特征可能并没有有效的表征特征,尤其是针对特殊的业务的时候,极有可能需要对已有的特征进⾏变换,从⽽让特征更加能够表征特有的业务。这⾥介绍⼏种常⽤的特征构造⽅法。
(1) 统计量构造
使⽤常⽤的统计量构造特征,常⽤的统计量有:
四分位数、中位数、平均值、标准差、偏差、偏度、偏锋、离散系统通过加⼤时间周期构造
例如周和⽉,统计更长周期例如周和⽉的数据作为特征。权重
通过时间衰减组合新特征。(越靠近观测权重值⾼)
(2) 周期特征
前n个周期/天/⽉/年的周期值,如过去5天分位数、平均值等同⽐/环⽐
(3) 特征组合
可以将⼏个不同的特征进⾏组合,新的特征也许能够更好的表征数据,优先考虑强特征维度,有⼤概⼀下⼏种组合⽅式:
离散+离散:笛卡尔积
离散+连续:连续特征分桶后进⾏笛卡尔积或基于类别特征 group by,类似于聚类特征构造连续+连续:加减乘除,⼆阶差分等
(4)数学变换
基础数学变换
## 两个特征相除
autos[\"stroke_ratio\"] = autos.stroke / autos.boreautos[[\"stroke\
## ⼏个特征进⾏复杂数学运算autos[\"displacement\"] = (
np.pi * ((0.5 * autos.bore) ** 2) * autos.stroke * autos.num_of_cylinders)
对数变换
对于具有重尾分布的正数值的处理,对数变换是⼀个⾮常强⼤的⼯具。(与⾼斯分布相⽐,重尾分布的概率质量更多地位于尾部。)它压缩了分布⾼端的长尾,使之成为较短的尾部,并将低端扩展为更长的头部。指数变换
指数变换是个变换族,对数变换只是它的⼀个特例。⽤统计学术语来说,它们都是⽅差稳定化变换。Box-Cox 变换
平⽅根变换和对数变换都可以简单推⼴为Box-Cox变换
xˆ=
{xλ−1λln(x)
(λ≠0)
(λ=0)
(5) 特征拆解
对于⼀些字符串,可以通过分解,得到⼀些特征
ID numbers: '123-45-6789'
Phone numbers: '(999) 555-0123'
Street addresses: '8241 Kaggle Ln., Goose City, NV'Internet addresses: 'http://www.kaggle.comProduct codes: '0 36000 29145 2'
Dates and times: 'Mon Sep 30 07:06:05 2013'
customer[\"Policy\"] # from the Policy feature.str # through the string accessor.split(\" \
# and expanding the result into separate columnscustomer[[\"Policy\
(6) 降维
降维也是⼀种常⽤的特征构造的⽅法,降维的⽅法可以查看笔者的sklearn机器学习系列,⾥⾯有详细的介绍。
(7) 新特征发现
有时候,可以通过已有的数据,发现⼀些新的特征,这个特征可以更加明确的帮助进⾏分类,想要发现新的特征,需要做到如下:
理解特征
去了解⼀些关于数据的领域知识,这些知识可以帮你更好的了解特征研究前⼈的⼯作,帮助开阔思路
使⽤数据可视化,可以帮助直观的观察数据
(8) ⾃动构建发现
基于python 和sklearn,有⼀个称为gplearn的库,可以遗传算法和符号回归,⾃动的去探索各种可能的特征组合,从⽽发现更好的特征。具体使⽤⽅式可以查看官⽅⽂档。
Processing math: 100%
参考
《特征⼯程⼊门与实践》《精通特征⼯程》
因篇幅问题不能全部显示,请点此查看更多更全内容