从 https://stackoverflow.com/a/35684975/4533188 我了解到,K-最近邻填补法的工作原理如下:
- 对于当前观测值,计算到所有其他观测值的距离。
- 对于当前观测值中的每个缺失值,考虑那些在所讨论特征上没有缺失值的k个最近邻观测值。
- 从这些观测值的特征值中:计算均值(或类似的统计量)——这就是用于填补的数值。
关键步骤是第一步:如果不是所有值都可用,我们如何计算距离?上面的帖子指出了异质欧几里得-重叠度量。然而,我对fancyimpute中的knn填补法的实现感兴趣。我追溯到了https://github.com/hammerlab/knnimpute,更具体地说是https://github.com/hammerlab/knnimpute/blob/master/knnimpute/few_observed_entries.py,我查看了代码。然而,我无法弄清楚它是如何工作的。
请问有人能向我解释一下,那里的knnimpute
是如何工作的吗?这里的距离计算是如何进行的?
回答:
以下内容专门针对Scikit-Learn Python库中的KNNImpute函数。文档:https://scikit-learn.org/stable/modules/generated/sklearn.impute.KNNImputer.html
参数”metric”的默认值为”nan_euclidian”。文档可以在https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.nan_euclidean_distances.html找到
直观上,”nan-euclidian”距离在可能的情况下计算标准的欧几里得距离(在任一观测值缺失时不计算),并线性缩放结果以补偿缺失的条目。