对于机器学习模型,我们把他们分成基于树的模型和非基于树的模型,因为在处理他们的特征需要不同的方法。
1.数值型特征
如果一个特征的值特别大的话,那么会使得其在非树模型上占有很大的比例,所以我们通常对其做归一化处理。
Outliers:不管是对特征还是标签,异常数据对模型的鲁棒性都会带来较大的打击,所以常用取数据的99%来去除异常数据。
rank:在处理outlier的时候可以把数值型转化成rank排序特征,这样异常值和普通值之间的差距就不会那么大,在排序时要注意训练集与测试集之间的rank连接(对此,可以先把train和test连在一起再做rank排序)。
log transform和sqrt:这两种方法都可以把太大的值转化到均值附近,降低异常值带来的影响。
特征生成方法:数值型特征的生成可以把在特征之间进行加减乘除等运算方式以求构建出较为有用的方法。
好的特征通常也需要一些常识性的东西,如一个产品的价格是2.49,那么我们可以把小数0.49当做一个新的特征,此特征考察的是人对价格心理因素。又比如如何辨别垃圾邮件的问题,没有人会在一秒钟间隔下阅读邮件。
2.类别型数据
类别数据分成类别和顺序变量,顺序变量属于类别,但是在其含义中包含了顺序关系,和数值型特征之间的区别是顺序变量并不能对比两对特征之间的差值大小。
举例顺序变量如下:
票的类型: 1,2,3
驾照类型:A,B,C,D
教育背景:小学,中学,大学
对顺序特征的处理方法有one-hot方法,LabelEncode方法(在做labelencode时注意其顺序关系),频率编码(就是统计不同类别在数据集中出现的次数)。
3.时序特征
找到当前时间的day,month,season,year,day of week,second等等
计算离某个时间点的距离
计算两个时间的差值
4.缺失值
使用某个值做替代
使用mean,medain方法
使用其所在类别下的均值
构建一个模型来预测其缺失值可能的位置