4.11 填充缺失值
问题描述
数据中存在缺失值,我们希望填充或者预测这些值。
解决方案
如果数据量不大,可以使用KNN(K-Nearest Neighbors,K近邻)算法来预测缺失值:
还可以使用scikit-learn的Imputer模块,用特征的平均值、中位数或者众数来填充缺失值,不过效果通常都会比使用KNN的差:
讨论
填充缺失值的策略主要有两种,每种策略各有优缺点。首先,可以使用机器学习来预测缺失值。为了达到目的,可以将带有缺失值的特征当作一个目标向量,然后使用剩余的特征来预测缺失值。虽然可以使用各种机器学习算法来做预测,但是最流行的选择是KNN。我们会在第14章中详细介绍KNN,这里仅做简单的讲解。作为一种机器学习算法, KNN使用k个最近的观察值(根据某种距离度量方法计算出来的)来预测缺失值。上述解决方案中使用了5个最近的观察值来预测缺失值。
KNN的不足是,为了知道哪些观察值离缺失值最近,需要计算每一个观察值与缺失值之间的距离。对于小数据集,这么做没有问题,但是如果数据集中有成千上万的观察值,计算量将成为一个很严重的问题。
一个比较容易扩展到大数据集的替代方案是用平均值来填充缺失值。例如,在我们的解决方案中,借助scikit-learn使用特征的平均值来填充缺失值。尽管这样做的效果通常没有使用KNN的好,但是“平均值填充策略”很容易扩展到包含成千上万观察值的大数据集。
如果要采用填充策略,最好创建一个二元特征来表明该观察值是否包含填充值。
延伸阅读
●《关于将KNN作为填充方法的研究》(http://bit.ly/2HS9sAT)
本书评论