详解 Scikit-learn 的 impute.KNNImputer函数:缺失值填充器

  • Post category:Python

下面我来详细讲解 Scikit-learn 的sklearn.impute.KNNImputer 函数的作用与使用方法的完整攻略。

KNNImputer 介绍

KNNImputer 是 Scikit-learn 的一个函数,用来对缺失值进行填充。它使用 KNN 算法来找出最接近的 k 个样本来估计缺失值。这种方法的优点是快速、精确,可以处理数据中的多个缺失值。

KNNImputer 参数说明

KNNImputer 函数有如下重要的参数:

  • n_neighbors:设定用来查找最接近样本的个数,一般建议取一个适中的数值,例如 5。
  • weights:设定用来计算缺失值的加权方法。默认是 uniform,即所有最近的样本都使用同等权重。另外还有 distance 和 callable 两种方法。
  • metric:设定用来计算样本之间距离的方法。默认是欧几里得距离。
  • missing_values:设定输入数据中的缺失值标记。默认是 NaN。
  • add_indicator:设定是否添加一个新的特征(二值化矩阵)来标记每一行哪些数据是缺失的。默认是 False。

KNNImputer 使用方法

以下是 KNNImputer 的使用方法:

  1. 导入模块:
from sklearn.impute import KNNImputer
  1. 创建 KNNImputer 对象:
imputer = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')
  1. 对数据进行填充:
X = [[1, 2, np.nan], [3, np.nan, 4], [np.nan, 5, 6]]
X_imputed = imputer.fit_transform(X)

使用 fit_transform() 函数完成填充,返回的是填充后的新矩阵。

  1. 如果 add_indicator 设置为 True,新矩阵会添加一个二值化矩阵:
imputer = KNNImputer(n_neighbors=5, weights='uniform', add_indicator=True)

填充后的新矩阵为:

[[1. 2. 5. 0. 0. 1.]
 [3. 3.5 4.  0. 1. 0.]
 [2. 5. 6.  1. 0. 0.]]

两个使用实例

以下是两个使用实例,希望能够帮助理解 KNNImputer 的使用方法:

实例 1

对二维数组进行填充:

import numpy as np
from sklearn.impute import KNNImputer

# 构建二维数组
X = np.array([[1, 2, np.nan], [3, np.nan, 4], [np.nan, 5, 6]])

# 创建 KNNImputer 对象并进行填充
imputer = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')
X_imputed = imputer.fit_transform(X)

# 输出填充后的数组
print(X_imputed)

输出结果:

[[1.  2.  5. ]
 [3.  3.5 4. ]
 [2.  5.  6. ]]

实例 2

对 Pandas 数据框进行填充:

import pandas as pd
from sklearn.impute import KNNImputer

# 构建数据框
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [np.nan, 5, 6]}).to_numpy()

# 创建 KNNImputer 对象并进行填充
imputer = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')
df_imputed = imputer.fit_transform(df)

# 输出填充后的数据框
print(df_imputed)

输出结果:

[[1.  5. ]
 [2.  5. ]
 [1.5 6. ]]

总结

本文介绍了 Scikit-learn 的 KNNImputer 函数的作用与使用方法,包括了 KNNImputer 的参数说明和两个使用实例。KNNImputer 是一种快速、精确的处理缺失值的方法,可以在数据挖掘和机器学习中发挥重要作用。