外观
MissForest 与 kNN 填补
MissForest and kNN Imputation
缺失数据的填补策略在很大程度上取决于缺失的类型,而缺失可以分为三种:
- 完全随机缺失(MCAR):数据确实是随机缺失的,且与任何已观测或未观测的变量都没有关系。
- 随机缺失(MAR):某个特征的缺失可以由数据集中其他已观测特征来解释。
- 非随机缺失(MNAR):缺失要么归因于缺失值本身,要么归因于我们未收集数据的那些特征。
- 我观察到随机缺失(MAR)在实际场景中比另外两种出现得多得多,所以在本章中,我想分享在这种情况下我通常更倾向于使用的两种填补策略。



顾名思义,它使用 k 近邻算法来填补缺失值。更具体地说,是通过在非缺失特征值上运行 kNN 来填补缺失特征。下图展示了它的工作方式:

- 步骤 1:选中一行带有缺失值的行 (r)。
- 步骤 2:利用非缺失的特征值找到它的 k 个最近邻。
- 步骤 3:使用 k 个最近邻行对应的非缺失值来填补该行 (r) 的缺失特征。
- 步骤 4:对所有带缺失值的行重复上述过程。
从下面的演示中可以明显看出它相对于均值/零值填补的有效性。左侧是一个带缺失值的特征分布。假设我们已经验证数据是随机缺失(MAR)的,使用均值/零值会改变汇总统计量和分布,如下图所示。

然而,如下所示,kNN 填补器显得更可靠,并且能够保留汇总统计量:

kNN 填补存在的一些主要问题是:1. 它的填补运行时间很高——尤其是对于高维数据集。2. 在存在类别型非缺失特征时,距离计算会出问题。3. 它需要特征缩放等等。
当数据是随机缺失(MAR)时,MissForest 填补器是另一种可靠的缺失值填补选择。顾名思义,它使用随机森林算法来填补缺失值。

- 首先,用一个随机猜测来填补缺失特征——均值、中位数等。2. 用随机森林对缺失特征建模。3. 仅用随机森林的预测结果填补原本缺失的值。4. 回到步骤 2。用步骤 3 得到的已填补数据集来训练下一个随机森林模型。5. 重复直到收敛(或达到最大迭代次数)。在存在多个缺失特征的情况下,思路(在某种程度上)保持不变:

按缺失程度递增的顺序依次填补特征——缺失值较少的特征先被填补。与之前一样,左侧是一个带缺失值的特征分布。同样,假设我们已经验证数据是随机缺失(MAR)的,使用均值/零值会改变汇总统计量和分布:

然而,如下所示,MissForest 显得更可靠,并且能保留汇总统计量。

kNN 填补与 MissForest 的 Jupyter notebook:https://bit.ly/3RW3i8k。