- 1 方法介绍
- 2 常用参数
- 3 示例
- 示例1:处理np.nan
- 示例2:处理None值
- 示例3:处理numpy中的0数据
- 示例4:添加权重
class sklearn.impute.KNNImputer(*, missing_values=nan, n_neighbors=5, weights='uniform', metric='nan_euclidean', copy=True, add_indicator=False)
使用k近邻来完成缺失值的估算,用于对缺失值如None的填补。
每个样本的缺失值都是使用训练集中找到的n_neighbors最近邻的平均值估算的 。如果两个样本都没有丢失的特征很接近,那么这两个样本就是相近的。
该方法为scikit-learn 0.22版中的新功能。
- missing_values:number, string, np.nan or None, default=np.nan,缺失值的占位符。所有出现missing_values的情况都将被估算。对于具有缺失值的可空整数类型的pandas数据框,missing_values 应将其设置为np.nan,因为pd.NA将转换为np.nan。
- n_neighbors:int, default=5,用于插补的相邻样本数。
- weights:{‘uniform’, ‘distance’} or callable, default=’uniform’,预测中使用的权重函数。可能的值:‘uniform’:统一的权重。每个邻域内的所有点的权重是相等的;‘distance’:权重按点的距离的倒数表示。在这种情况下,查询点较近的邻居将比较远的邻居具有更大的影响; callable:用户定义的函数,该函数接受距离数组,并返回包含权重的相同形状的数组。
import numpy as np from sklearn.impute import KNNImputer import pandas as pd示例1:处理np.nan
X = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]] imputer = KNNImputer(n_neighbors=2) X = imputer.fit_transform(X) print(X)
[[1. 2. 4. ] [3. 4. 3. ] [5.5 6. 5. ] [8. 8. 7. ]]示例2:处理None值
X = [[1, 2, None], [3, 4, 3], [None, 6, 5], [8, 8, 7]] imputer = KNNImputer(n_neighbors=2) print(imputer.fit_transform(X)) print(type(imputer.fit_transform(X))) # 返回
[[1. 2. 4. ] [3. 4. 3. ] [5.5 6. 5. ] [8. 8. 7. ]]示例3:处理numpy中的0数据
X = np.array([[1, 2, 0], [3, 4, 3], [0, 6, 5], [8, 8, 7]]) imputer = KNNImputer(n_neighbors=2,missing_values=0) print(imputer.fit_transform(X))
[[1. 2. 4. ] [3. 4. 3. ] [5.5 6. 5. ] [8. 8. 7. ]]示例4:添加权重
weights='distance':权重按点的距离的倒数表示。在这种情况下,查询点较近的邻居将比较远的邻居具有更大的影响。
X = np.array([[1, 2, 0], [3, 4, 3], [0, 6, 5], [8, 8, 7]]) imputer = KNNImputer(n_neighbors=2,missing_values=0,weights='distance') print(imputer.fit_transform(X))
[[1. 2. 3.66666667] [3. 4. 3. ] [5.5 6. 5. ] [8. 8. 7. ]]
参考文献:scikit-learn中文社区



