【机器学习】特征工程与模型调优
1、特征工程与意义
特征就是从数据中抽取出来的对结果预测有用的信息。
特征工程是使用专业知识背景知识和技巧处理数据,是得特征能在机器学习算法上发挥更好的作用的过程。
2、基本数据处理
数据采集
- 需要思考那些数据有用
- 数据是否容易采集到
- 线上实时计算的时候获取是否快捷
数据清洗
数据清洗做的事情:洗掉脏数据
思考角度:
1、单维度考量
- 身高3m的人?显然不可能
- 一个月买脸盆墩布花了10w的人?也不太可能
- 组合或统计属性判定
- 号称在美国但IP却一直在大陆的新闻阅读用户?
- 要统计一个人是否会去买篮球鞋,然而你的样本中女性占80%?
2、统计方法
- 使用箱线图/boxplot上下界
- 取出缺省值多的字段
- 不可信的样本要去掉,缺省值极多的字段考虑不用
数据采样
分类问题中,很多情况下正负样本是不均衡的。比如患某些疾病的患者和健康人。
大多数模型对正负样本比是敏感的(如逻辑回归LR)
解决方法:随机采样、分层采样
如果是正样本>>负样本,而且量都很大:在正样本下采样。(如正样本200万个,负样本20万个,此时在正样本中随机采样20万个,正负样本1:1构建分类器)
如果是正样本>>负样本,量不大:1、采集更多数据;2、可以oversampling,即过采样(如有10万正样本,1000负样本,简单的方法是将1000负样本多重复几遍。然而这样做可能会加大过拟合风险,故会将负样本经过一些小的处理。如图像识别里面判断是否为猫,可将图片旋转?镜像处理?加上一些噪声?均可);3、修改损失函数。
3、常见特征工程
数值型
1、幅度调整/归一化
- 幅度缩放Scaling
- 标准化Standardization
- 归一化Normalization
2、将数值进行Log等变化
3、统计值max、min、mean、std
4、离散化
对连续值可以将其离散化,按照一个区间来分(分箱、分桶)
下面代码生成满足标准高斯分布的20个随机数,使用pandas的cut函数可以将数据划分。
import numpy as np
import pandas as pd
arr = np.random.randn(20)
factor = pd.cut(arr,4)
factor
Out[5]:
[(-0.643, 0.329], (0.329, 1.302], (-1.616, -0.643], (-1.616, -0.643], (-0.643, 0.329], ..., (-0.643, 0.329], (-0.643, 0.329], (-0.643, 0.329], (0.329, 1.302], (-1.616, -0.643]]
Length: 20
Categories (4, interval[float64]): [(-2.593, -1.616] < (-1.616, -0.643] < (-0.643, 0.329] < (0.329, 1.302]]
相关文章