我们的数据样本中经常会出现缺失值的情况,那么在数据清洗的过程中,怎么处理缺失值?对于缺失值有三类处理方法:
- 删除
- 填充
- 不处理
1.删除
对于缺失情况很严重的变量(缺失比例0.8-0.9以上),一般采用直接删除的方法
2.填充
- 均值填充
数值型变量:
如果数据分布近似正态分布,可以使用均值
如果数据分布是偏态分布时,则使用中位数更合适
字符型变量:
众数填充
- 单独一类
对于数据中的空值有特殊含义的,可以单独归为一类数据
- 模型填充
将缺失变量作为目标变量进行预测,得到最为可能的补全值
3. 不处理
对于xgboost、ligtgbm可以不处理缺失值,因其本身有针对缺失值的处理,具体处理方法如下:
-
训练阶段
如果在训练过程中,特征 a 出现了缺失值:
1)首先对于 a 非缺失的数据,计算出 Lsplit 并比较大小,选出最大的 Lsplit ,确定其为分裂节点(即选取特征的某个阈值);
2)然后对于 a 缺失的数据,将缺失值分别划分到左子树和右子树,分别计算出左子树和右子树的 Lsplit ,选出分裂后增益更大的 Lsplit ,将该方向作为缺失值的分裂方向 -
预测阶段
如果在预测过程中,特征 a 出现了缺失值,分为以下两种情况:
1)如果训练过程中,a 出现过缺失值,则按照训练过程中缺失值划分的方向(左/右),进行划分;
2)如果训练过程中,a 没有出现过缺失值,将缺失值的划分到默认方向(右子树)