数据集含有缺测值


作者Lou Xiao创建时间2020-09-18 14:59:00更新时间2020-09-18 14:59:00

深度学习(deep learning)中,常常遇到数据集含有缺测值的问题,本文简要地给出解决的思路。

下面列出一些常用的思路:

1. 抛弃含有缺测值的样本

当样本数量非常多,而含有缺测值的样本所占的比例很低时,可以删掉含有缺测值的样本。

2. 插补缺测值

当含有缺测值的样本所占的比例很高时,就不能把这些含有缺测值的样本删掉,必须考虑插补缺测值。插补的方法很多:

  • 用全局平均值替换
  • 线性插值
  • 使用机器学习的方法拟合后进行插值

3. 设置为特殊值

机器学习算法可以从样本中learning那些缺测值,但是会显著增加(要求)机器学习模型的复杂度(能力),如果模型的能力低于“所需最小值”,模型可能不收敛。
目前没有通用的方法,下面给出一个方向,在具体问题中测试效果:

  • 把样本 Min-Max规范化,把特征取值范围缩放到[0,1],把缺测值设置为0
  • 把样本 标准正态化,把缺测值设置为0

3.1 Min-Max规范化:

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 import numpy as np
2 def min_max_regularize(arr, new_min, new_max):
3 grid_min = np.min(arr)
4 grid_max = np.max(arr)
5 arr = (arr - grid_min) / (grid_max - grid_min) * (new_max - new_min) + new_min
6 return arr

3.2 标准正态化:

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 import numpy as np
2 def normalize(arr):
3 std = np.std(arr.reshape(-1))
4 avg = np.average(arr.reshape(-1))
5 arr = (arr - avg) / std
6 return arr, avg, std
文章目录