Skip to content

9.6 缺失数据

原文 The Elements of Statistical Learning
翻译 szcf-weiya
时间 2017-03-13

一个或多个输入特征的观测含有缺失值是很常见的。通常的方式是以某种方式来插补(填补)缺失值。

然而,处理这个问题的第一个问题是如何确定缺失数据的机制是否使观测数据失真。大致地说,如果导致其遗漏的机制与其(未观测到的)值无关,则是随机丢失数据。更精确的定义由 Little and Rubin (2002)1 给出。假设 $\mathbf y$ 是响应变量,$\mathbf X$ 为 $N\times p$ 的输入矩阵(某些值缺失)。用 $\mathbf X_{obs}$ 记 $\mathbf X$ 中的观测值,并令 $\mathbf{Z=(y,X),Z_{obs}=(y,X_{obs})}$。最后,$\mathbf R$ 为指示矩阵,如果 $x_{ij}$ 缺失,则第 $ij$ 个元素为 1,否则为 0,则如果 $\mathbf R$ 的分布仅仅通过 $\mathbf Z_{obs}$ 来依赖 $\mathbf Z$,数据称为随机缺失 (MAR)

这里 $\theta$ 为 $\mathbf R$ 中任意参数。如果 $\mathbf R$ 的分布不依赖观测数据或者缺失数据,则数据称为完全随机缺失 (MCAR) MCAR 是比 MAR 更强的假设:为了保证有效性,大部分的插补方法依赖 MCAR。

举个例子,如果一个病人的测量没有被采用,是因为医生认为他病了,则这个观测不是 MAR 或者 MACR。这种情形下,缺失数据的缺失机制导致我们的观测的训练数据得到真实总体扭曲的情形,这种情形下数据插补是很危险的。通常确定特征是否是 MACR 必须从数据收集的过程中的信息做出判断。对于类别型特征,诊断这个问题是把缺失作为一个新的类别“缺失”。接着对训练数据拟合我们的模型来看看“缺失”这个类别是否预测了一些响应变量。

假设特征完全随机缺失,有一系列方式可以处理:

  1. 丢掉含任意缺失的数据的观测
  2. 在训练阶段,依赖于具体学习算法来处理缺失数据
  3. 训练前插补所有缺失数据。

方式(1)用在缺失数据相对较少的情形,其它情形应该避免使用。至于(2),CART 是有效处理缺失数据的一个学习算法,通过代理分割 (surrogate splits)(第9.2.4节)。MARS 和 PRIM 采用类似的方式。在广义加性建模中,当在 backfitting 算法中对某特征的部分残差被光滑,忽略该给定输入特征的所有缺失观测,并且将它们的拟合值设为0。因为拟合曲线的均值为0(当模型包含截距时),这等价于对缺失的观测赋予平均的拟合值。

对于大部分学习方法,插补方式(3)是必要的。最简单的策略是用该特征的非缺失数据的均值或中值进行插补。(注意到上面对广义加性模型的过程与这个类似。)

如果特征至少有中等程度的依赖,可以通过在给定其他特征的情形下估计每个特征的预测模型,然后从模型中用预测从而对每个缺失数据进行插补。在选择插补特征的学习算法时,必须记住这个选择与从 $\mathbf X$ 估计 $\mathbf y$ 的方法不同。因此通常更倾向于灵活的,自适应的方法,甚至对于在 $\mathbf X$ 上运用线性回归 $\mathbf y$ 的最终目的。另外,如果在训练集中有许多缺失的特征值,学习算法自身要能够处理缺失的特征值。CART因此是插补的理想选择。

插补之后,缺失数据一般视为和实际观测的一样。这忽略了由于插补带来的不确定性,本身会对响应变量模型的估计和预测引入额外的不确定性。可以通过进行多重插补来衡量这种额外的不确定性,因此得到许多不同的训练集。对 $\mathbf y$ 的预测模型可以对每个训练集进行拟合,并且可以评估训练集的方差。如果 CART 作为插补的工具,多重插补可以通过在对应的终止结点取样得到。

weiya 注:R Programming

笔记R 语言处理缺失数据总结了 R 语言中处理缺失数据的一般步骤及代码。


  1. Little, R. and Rubin, D. (2002). Statistical Analysis with Missing Data (2nd Edition), Wiley, New York. 

Comments