sklearn.impute.KNNImputer插值寻找近邻的原理

前言

最近预处理数据需要使用插值来填充; 首先是sklearn.impute.SimpleImputer方法, strategy 只有mean, median等; 我需要相邻的邻居值来做插值, 所以选中了sklearn.impute.KNNImputer

疑问

代码:imputer = KNNImputer(n_neighbors=2)

Data Before performing imputation
    Maths  Chemistry  Physics  Biology
0   80.0       60.0      NaN     78.0
1   90.0       65.0     57.0     83.0
2    NaN       56.0     80.0     67.0
3   95.0        NaN     78.0      NaN


After performing imputation
 [[80.  60.  68.5 78. ]
 [90.  65.  57.  83. ]
 [87.5 56.  80.  67. ]
 [95.  58.  78.  72.5]]

Maths第三列(Nan)是怎么算出来的, 我一开始用了两个最邻近的数值, 怎么算都不对; 后来看了youtube才恍然大悟:KNNImputer说的近邻并不是Math这列的物理近邻, 而是 用其他的科目(Chemistry, Physics等)去计算euclidean distance; 根据euclidean distance来判断邻居, 所以邻居应该是person0, person3 !
直观上理解就是: 如果某两个人其他科目的成绩都接近, 那么这两个人即是相似的, 他们的Maths成绩很可能接近;
sklearn.impute.KNNImputer插值寻找近邻的原理_第1张图片
sklearn.impute.KNNImputer插值寻找近邻的原理_第2张图片
sklearn.impute.KNNImputer插值寻找近邻的原理_第3张图片

euclidean distance计算方式

*KNN_imputer原理视频(传不上来图片, 大家只能自己看视频了):
https://www.youtube.com/watch?v=AHBHMQyD75U

你可能感兴趣的:(机器学习/,数据挖掘,sklearn,python)