【机器学习】特征工程与模型调优

2020-05-06 00:00:00 选择 数据 样本 特征 正则

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]]

相关文章