数据缺失是指在数据采集、传输和处理的过程中,由于某些原因导致数据不完整的情况。
缺失值的存在会给数据的统计带来问题,某些数据分析模型也不能直接处理存在缺失值的数据集,因此,如果要对该数据进行进一步统计和分析,首先需要对确实值进行处理。
处理缺失值的方法可以分为两类:
第一类方法是 删除 带有缺失值的样本或特征;
第二类方法是采用某种方法对缺失值进行 填补 ,如均值填补、随机填补和基于模型的填补。
删除法
删除法通过删除包含缺失值的数据,来得到一个完整的数据子集。数据的删除既可以从样本的角度进行,也可以从特征的角度进行:
均值填补
对于存在缺失值的某一个特征,均值填补法首先计算该特征中非缺失值的平均数或众数,然后使用平均数或众数来代替缺失值。对连续型特征,通常使用平均值进行填补;对离散型特征,则使用众数进行填补。
均值填补法会使得数据过分集中在平均值或众数上,导致特征的 方差被低估 。此外,由于完全忽略特征之间的相关性,均值填补法会大大弱化特征之间的 相关性 。
实际应用中,可以根据一定的辅助特征,将数据集 分组,然后在每一组数据上分别使用均值 填补 。
随机填补
随机填补是在均值填补的基础上加上随机项,通过增加缺失值的随机性来改善缺失值分布过于集中的缺陷。随机填补方法包括 贝叶斯Bootstrap 方法和 近似贝叶斯Bootstrap 方法。
假设数据集有n个样本,某特征 f 存在 k 个非缺失值和(n - k)个缺失值。
贝叶斯Bootstrap方法步骤:
- 从均匀分布
U
(
0
,
1
)
U(0,1)
U(0,1)中随机抽取
k
−
1
k - 1
k−1个随机数,并进行升序排序记为
a
1
a_1
a1,
a
2
a_2
a2,…,
a
k
−
1
a_{k-1}
ak−1。
- 对
(
n
−
k
)
(n-k)
(n−k)个缺失值,分别从非缺失值{
f
1
,
f
2
,
…
,
f
k
f_1,f_2,…,f_k
f1,f2,…,fk}中以 概率 {
a
1
a_1
a1,
a
2
−
a
1
a_2-a_1
a2−a1,…,
1
−
a
k
−
1
1-a_{k-1}
1−ak−1}采样一个值进行填补。
近似贝叶斯Bootstrap方法步骤:
- 从
k
k
k个非缺失值{
f
1
f_1
f1,
f
2
,
f_2,
f2,…
,
f
k
,f_k
,fk}中有放回地抽取
k
k
k个值 建立 一个新的大小为
k
k
k的集合
F
F
F。
- 对于
(
n
−
k
)
(n-k)
(n−k)个缺失值,分别从
F
F
F中随机 抽取一个值进行填补。
基于模型的填补
基于模型的方法将缺失特征
f
f
f作为预测目标,将数据集中其他特征或其子集作为输入特征,通过特征
f
f
f的非缺失值构造训练集,训练分类或者回归模型,然后使用构建的 模型来预测 特征
f
f
f的缺失值。
在实际使用基于模型的填补方法时,需要采用模型评估方法对模型的预测性能进行评估,如果构建的模型预测性能太差,则不适合使用该方法。
缺点:基于模型的填补方法将增大特征之间的相关性。
其他缺失值处理方法
缺失值处理的方法有很多,除了以上方法之外,还有 哑变量方法 和 EM算法 等。
哑变量方法:
对于离散型特征,如果存在缺失值,可以将缺失值作为一个单独的取值进行处理,如将缺失值替换为“unknown”。
EM算法:
利用不完整的信息实现概率模型的参数化估计的算法。该算法可以用来进行缺失值填补,此时缺失特征被当作隐含变量。