【机器学习】sklearn中使用k近邻来完成缺失值的填补(KNNImputer)
文章目录1 方法介绍2 常用参数3 示例示例1:处理np.nan示例2:处理None值示例3:处理numpy中的0数据示例4:添加权重1 方法介绍class sklearn.impute.KNNImputer(*, missing_values=nan, n_neighbors=5, weights='uniform', metric='nan_euclidean', copy=True, add
·
1 方法介绍
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版中的新功能。
2 常用参数
- 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:用户定义的函数,该函数接受距离数组,并返回包含权重的相同形状的数组。
3 示例
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. ]]
<class 'numpy.ndarray'>
示例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中文社区
更多推荐
已为社区贡献5条内容
所有评论(0)