来源:人工智能大讲堂本文约2600字,建议阅读9分钟本文带你了解了缺失值、缺失值的原因、模式以及如何使用 KNNImputer 来估算缺失值。
KNN和随机森林一样,给人的第一印象就是用于分类和回归,既然大家已经看到随机森林能够进行数据降维,那么也就没必要惊讶于今天的话题:knn缺失值填补。
概述
scikit-learn 的 KNNImputer 是一种广泛使用的估算缺失值的方法。它被广泛视为传统插补技术的替代品。
在当今世界,数据是从多个来源收集的,用于分析、产生见解、验证理论等等。从不同资源收集的这些数据通常可能缺少一些信息。这可能是由于数据收集或提取过程中的问题,也可能是人为错误。
处理这些缺失值,从而成为数据预处理的重要步骤。插补方法的选择至关重要,因为它可以显着影响一个人的工作。
大多数统计和机器学习算法都基于对数据集的完整观察。因此,处理缺失信息变得至关重要。少数统计文献涉及缺失值的来源和克服该问题的方法。最好的方法是用估计值来估算这些缺失的观察值。
在本文中,我们介绍了使用相邻数据点的观察值来估算数据集中缺失值的指南。为此,我们使用非常流行的scikit-learn中基于k-Nearest Neighbors算法的KNNImputer。
数据集中的缺失值对于任何数据科学家来说都是一个大黄蜂的巢穴。具有缺失值的变量可能是一个非常重要的问题,因为没有简单的方法来处理它们。
通常,如果数据中缺失观测值的比例相对于观测值总数较小,我们可以简单地删除这些观测值。然而,这不是最常见的情况。删除包含缺失值的行可能会导致放弃有用的信息或模式。
用统计术语来说,随着独立信息的数量减少,这会导致自由度降低。
在收集有关变量的观察结果时,由于多种原因可能会出现缺失值,例如 –
缺失值的类型一般可以分为:
用于缺失值插补的单变量方法是估计值的简单方法,但可能无法始终提供准确的估计。例如,假设我们有与道路上汽车密度和空气中污染物水平相关的变量,并且污染物水平缺失的观测值很少,通过污染物水平均值/中值估算污染物水平不一定是合适的策略。
在这种情况下,k 最近邻 (kNN) 等算法可以帮助估算缺失数据的值。社会学家和社区研究人员认为,人类之所以生活在社区中,是因为邻居会产生安全感、对社区的依恋以及通过参与各种活动展现社区身份的关系。
一种适用于数据的类似插补方法是 k 最近邻 (kNN),它通过距离测量来识别相邻点,并且可以使用相邻观测值的完整值来估计缺失值。
假设,您家里的必需食品库存不足,并且由于封锁,附近的商店都没有开门。因此,你向你的邻居求助,结果你会做他们提供给你的任何东西。这是一个来自 1-最近邻(借助最近邻的帮助)的插补示例。
相反,如果您确定向其寻求帮助的 3 个邻居,并选择组合 3 个最近邻居提供的项目,这就是来自 3 个最近邻居的插补示例。同样,数据集中的缺失值可以借助数据集中 k 最近邻的观察值进行估算。数据集的相邻点由某些距离度量确定,通常是欧氏距离。
考虑上图表示 kNN 的工作原理。在这种情况下,椭圆区域表示绿色方形数据点的相邻点。我们使用距离度量来识别邻居。
kNN 方法的思想是识别数据集中在空间中相似或接近的“k”个样本。然后我们使用这些“k”个样本来估计缺失数据点的值。每个样本的缺失值都是使用数据集中找到的“k”个邻居的平均值来估算的。
让我们看一个例子来理解这一点。考虑二维空间 (2,0)、(2,2)、(3,3) 中的一对观察值。这些点的图形表示如下所示:
基于欧几里德距离的最短距离的点被认为是最近的邻居。例如,A点的第1-最近邻是B点。对于B点,第1-最近邻是C点。
在存在缺失坐标的情况下,通过忽略缺失值并按比例增加非缺失坐标的权重来计算欧氏距离。
其中:
例如,两点 (3, NA , 5) 和 (1, 0, 0) 之间的欧氏距离为:
现在我们使用sklearn包 pairwise metric 模块中的sklearn nan_euclidean_distances函数来计算具有缺失值的两点之间的距离。
尽管nan_euclidean_distances适用于 X 和 Y 参数提供的两个一维数组,但它也可以适用于具有多个维度的单个数组。
因此,距离矩阵是一个 2 X 2 – 矩阵,它表示观测值对之间的欧几里得距离。此外,结果矩阵的对角线元素为 0,因为它表示各个观测值与其自身之间的距离。
我们将使用sklearn 的impute模块中的KNNImputer函数。KNNImputer 通过使用欧几里德距离矩阵找到最近的邻居来帮助估算观察中存在的缺失值。
在这种情况下,上面的代码显示观察 1 (3, NA, 5) 和观察 3 (3, 3, 3) 在距离方面最接近 (~2.45)。因此,用第 1 最近邻估算观察 1 (3, NA, 5) 中的缺失值将给出 3 的估计值,这与观察 3 (3, 3, 3) 的第二个维度的估计值相同。
此外,将观测值 1 (3, NA, 5) 中的缺失值与 2 最近邻进行估算将给出 1.5 的估计值,这与观测值 2 和 3 的第二个维度的平均值相同,即 (1, 0, 0) 和 (3, 3, 3)。
到目前为止,我们讨论了使用 kNNImputer 处理连续变量的缺失值。下面,我们创建了一个在分类变量中包含缺失值的数据框。为了在分类变量中估算缺失值,我们必须将分类值编码为数值,因为 kNNImputer 仅适用于数值变量。我们可以使用类别到数字变量的映射来执行此操作。
总结
在本文中,我们了解了缺失值、缺失值的原因、模式以及如何使用 KNNImputer 来估算缺失值。总而言之,选择 k 来使用 kNN 算法估算缺失值可能是争论的焦点。此外,研究表明,在使用不同的 k 值执行插补后,必须使用交叉验证来测试模型。尽管缺失值的插补是一个不断发展的研究领域,但 kNN 是一种简单有效的策略。
编辑:黄继彦