转自本人博客 Lew's Blog
- 什么是特征工程?
顾名思义,特征工程是一种工程活动,目的是从原始数据中最大限度的提取出能表征原始数据信息的特征。数据和特征决定了机器学习的上限,算法和模型不过是逼近这个上限。不过深度学习不用像传统机器学习那样人为合成高级复杂特征,只需利用人类的先验知识处理一阶特征,后面深度学习会自己学习到相关的复杂特征。 - 数据类型
不同的数据有不同的数据类型,而不同数据类型的数据处理方式也不同- 离散型数据
在进行机器学习或深度学习的建模中,总会碰到离散型数据,比如 性别:男,女;比如学历:高中,大学,硕士,博士。一般来说,对离散型的数据有以下几种处理方式:- One-Hot Encoding(若特征种类很多,高稀疏化)
- Hash Encoding(低稀疏,高压缩)
- embedding(注意比较与Hash Encoding 的区别,NLP常用)
- 基于计数的encoding
- 特殊情况:当输入是0,1的二值信号,而且0是对所模拟的模型是有作用的,那么这时候采用flatten的战术,即0变成0,1 ,1变成1,0 。比如原来64个输入特征,flatten后变成128个特征,实例参考建模攻击PUF的相关项目。注意flatten和one-hot有本质区别,一个是扩展特征的长度,一个是扩展特征的维度。
- 连续型数据
除了分类这样的离散数据,我们也会碰到诸如身高,学习成绩,资金等连续型的数据。对于连续型数据,有以下的处理方式:- 缺失数据处理:在收集来的数据中,往往会出现某处数据为空不存在的情况。一般处理方式有填0处理,填NAN处理,平均值或中位值处理等。没有特殊情况的话,一般不推荐填0处理,0和空相差的意义较大,0是有意义的。
- 归一化:归一化与标准化的区别:标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。
- 离散化:将连续值分区,某个分区内的数据均为某个分类值。例如个人资产为连续值,处理后 个人资产小于100W为普通阶级,个人资产100W-1000W为中产阶级,个人资产1000W以上为富人阶级等。某些情况下若取值跨度太大或者太小,可以取对数或者开方平方等处理后再离散化。
- 时间数据
时间数据本质上也还是一种连续数据,但是有一些特殊的地方,比如时区,比如周期性。因此处理时尤其要注意特殊节假日,时区等问题。 - 空间数据
例如经纬度,地址,邮编等,比较不规范,根据具体情况进行处理
- 离散型数据
Reference