KNNImputer#

class sklearn.impute.KNNImputer(*, missing_values=nan, n_neighbors=5, weights='uniform', metric='nan_euclidean', copy=True, add_indicator=False, keep_empty_features=False)[source]#

使用 k-近邻算法补全缺失值的插补器。

每个样本的缺失值都使用训练集中找到的 n_neighbors 个最近邻的平均值进行插补。如果两个样本都没有缺失的特征值相近,则认为它们是近邻。

用户指南中阅读更多信息。

在 0.22 版本中添加。

参数:
missing_valuesint, float, str, np.nan 或 None, 默认为 np.nan

缺失值的占位符。所有出现 missing_values 的地方都将被插补。对于带有可空整型数据类型和缺失值的 pandas 数据框,missing_values 应设置为 np.nan,因为 pd.NA 将被转换为 np.nan。

n_neighborsint, 默认为 5

用于插补的近邻样本数量。

weights{‘uniform’, ‘distance’} 或 callable, 默认为 ‘uniform’

预测中使用的权重函数。可能的值为

  • ‘uniform’:均匀权重。每个邻域中的所有点都具有相同的权重。

  • ‘distance’:根据距离的倒数对点进行加权。在这种情况下,查询点较近的邻居将比距离较远的邻居具有更大的影响力。

  • callable:一个用户自定义函数,它接受一个距离数组,并返回一个包含权重的相同形状的数组。

metric{‘nan_euclidean’} 或 callable, 默认为 ‘nan_euclidean’

搜索邻居的距离度量。可能的值为

  • ‘nan_euclidean’

  • callable:一个用户定义函数,符合 func_metric(x, y, *, missing_values=np.nan) 的定义。xy 分别对应 XY 的一行(即一维数组)。该可调用函数应返回一个标量距离值。

copybool, 默认为 True

如果为 True,将创建 X 的副本。如果为 False,将在可能的情况下进行原地插补。

add_indicatorbool, 默认为 False

如果为 True,MissingIndicator 变换将堆叠到插补器变换的输出上。这使得预测估计器即使在插补后也能考虑缺失情况。如果在拟合/训练时某个特征没有缺失值,那么即使在变换/测试时存在缺失值,该特征也不会出现在缺失指示器上。

keep_empty_featuresbool, 默认为 False

如果为 True,当调用 fit 时完全由缺失值组成的特征,在调用 transform 时也会在结果中返回。插补值始终为 0

在 1.2 版本中添加。

属性:
indicator_MissingIndicator

用于为缺失值添加二元指示符的指示器。如果 add_indicator 为 False,则为 None

n_features_in_int

fit 期间看到的特征数量。

在 0.24 版本中添加。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

在 1.0 版本中添加。

另请参阅

SimpleImputer

使用简单策略补全缺失值的单变量插补器。

IterativeImputer

多变量插补器,它根据所有其他特征来估计每个缺失特征的插补值。

参考资料

示例

>>> import numpy as np
>>> from sklearn.impute import KNNImputer
>>> X = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]]
>>> imputer = KNNImputer(n_neighbors=2)
>>> imputer.fit_transform(X)
array([[1. , 2. , 4. ],
       [3. , 4. , 3. ],
       [5.5, 6. , 5. ],
       [8. , 8. , 7. ]])

有关更详细的示例,请参阅 在构建估计器之前插补缺失值

fit(X, y=None)[source]#

在 X 上拟合插补器。

参数:
X类数组,形状为 (n_samples, n_features)

输入数据,其中 n_samples 是样本数量,n_features 是特征数量。

y忽略

未使用,按惯例在此处是为了 API 一致性。

返回:
selfobject

已拟合的 KNNImputer 类实例。

fit_transform(X, y=None, **fit_params)[source]#

拟合数据,然后进行变换。

使用可选参数 fit_params 将变换器拟合到 Xy,并返回 X 的变换版本。

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认为 None

目标值(对于无监督变换为 None)。

**fit_paramsdict

额外的拟合参数。

返回:
X_new形状为 (n_samples, n_features_new) 的 ndarray 数组

变换后的数组。

get_feature_names_out(input_features=None)[source]#

获取变换的输出特征名称。

参数:
input_features类数组的字符串或 None, 默认为 None

输入特征。

  • 如果 input_featuresNone,则使用 feature_names_in_ 作为输入特征名称。如果 feature_names_in_ 未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是类数组,则如果 feature_names_in_ 已定义,则 input_features 必须与 feature_names_in_ 匹配。

返回:
feature_names_out由字符串对象组成的 ndarray

变换后的特征名称。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查阅用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, 默认为 True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
paramsdict

参数名称及其对应的值。

set_output(*, transform=None)[source]#

设置输出容器。

有关如何使用此 API 的示例,请参阅 介绍 set_output API

参数:
transform{“default”, “pandas”, “polars”}, 默认为 None

配置 transformfit_transform 的输出。

  • "default": 变换器的默认输出格式

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 变换配置不变

在 1.4 版本中添加: "polars" 选项已添加。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

插补 X 中的所有缺失值。

参数:
X形状为 (n_samples, n_features) 的类数组

要补全的输入数据。

返回:
X形状为 (n_samples, n_output_features) 的类数组

插补后的数据集。n_output_features 是在 fit 期间并非总是缺失的特征数量。