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)
的定义。x
和y
分别对应X
和Y
的一行(即一维数组)。该可调用函数应返回一个标量距离值。
- 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 版本中添加。
- indicator_
另请参阅
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
将变换器拟合到X
和y
,并返回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_features
为None
,则使用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
配置
transform
和fit_transform
的输出。"default"
: 变换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 变换配置不变
在 1.4 版本中添加:
"polars"
选项已添加。
- 返回:
- self估计器实例
估计器实例。