IterativeImputer#

class sklearn.impute.IterativeImputer(estimator=None, *, missing_values=nan, sample_posterior=False, max_iter=10, tol=0.001, n_nearest_features=None, initial_strategy='mean', fill_value=None, imputation_order='ascending', skip_complete=False, min_value=-inf, max_value=inf, verbose=0, random_state=None, add_indicator=False, keep_empty_features=False)#

多变量插补器,从所有其他特征中估计每个特征。

一种通过建模每个具有缺失值的特征作为循环轮询方式中其他特征的函数来插补缺失值的策略。

更多信息请参阅 用户指南

Added in version 0.21.

Note

这个估计器目前仍然是 实验性的 :预测和 API 可能会在没有任何弃用周期的情况下发生变化。要使用它,你需要显式导入 enable_iterative_imputer

>>> # 显式要求这个实验性功能
>>> from sklearn.experimental import enable_iterative_imputer  # noqa
>>> # 现在你可以从 sklearn.impute 正常导入
>>> from sklearn.impute import IterativeImputer
Parameters:
estimator估计器对象, default=BayesianRidge()

在循环轮询插补的每个步骤中使用的估计器。 如果 sample_posterior=True ,估计器必须在 predict 方法中支持 return_std

missing_valuesint 或 np.nan, default=np.nan

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

sample_posteriorbool, default=False

是否从拟合估计器的(高斯)预测后验中为每个插补进行采样。如果设置为 True ,估计器必须在 predict 方法中支持 return_std 。如果使用 IterativeImputer 进行多次插补,请设置为 True

max_iterint, default=10

在返回最终轮次计算的插补之前要执行的最大插补轮次数。一轮是对每个具有缺失值的特征进行单次插补。一旦满足 max(abs(X_t - X_{t-1}))/max(abs(X[known_vals])) < tol ,即停止。其中 X_t 是迭代 t 时的 X 。注意,只有在 sample_posterior=False 时才应用提前停止。

tolfloat, default=1e-3

停止条件的容差。

n_nearest_featuresint, default=None

用于估计每个特征列缺失值的其他特征数量。特征之间的近似度使用每个特征对之间的绝对相关系数(在初始插补后)进行测量。为了确保特征在整个插补过程中的覆盖,邻近特征不一定是最接近的,而是根据与每个插补目标特征的相关性概率抽取的。当特征数量巨大时,可以显著加快速度。如果为 None ,将使用所有特征。

initial_strategy{‘mean’, ‘median’, ‘most_frequent’, ‘constant’}, default=’mean’

初始化缺失值的策略。与 SimpleImputer 中的 strategy 参数相同。

fill_valuestr 或数值, default=None

strategy="constant" 时, fill_value 用于替换所有出现的 missing_values 。对于字符串或对象数据类型, fill_value 必须是字符串。 如果为 None ,插补数值数据时 fill_value 将为 0,字符串或对象数据类型时为 “missing_value”。

Added in version 1.3.

imputation_order{‘ascending’, ‘descending’, ‘roman’, ‘arabic’, ‘random’}, default=’ascending’

插补特征的顺序。可能的值:

  • 'ascending' :从缺失值最少的特征到最多的特征。

  • 'descending' :从缺失值最多的特征到最少的特征。

  • 'roman' :从左到右。

  • 'arabic' :从右到左。

  • 'random' :每次轮次的随机顺序。

skip_completebool, default=False

如果为 True ,则在 transform 期间具有缺失值的特征在 fit 期间没有缺失值时,将仅使用初始插补方法进行插补。如果你有许多在 fittransform 期间都没有缺失值的特征,设置为 True 可以节省计算。

min_valuefloat 或形状为 (n_features,) 的数组, default=-np.inf

可能的最小插补值。如果为标量,则广播到形状 (n_features,) 。如果为数组,则期望形状 (n_features,) ,每个特征一个最小值。默认值为 -np.inf

Changed in version 0.23: 添加了对数组类型的支持。

max_valuefloat 或形状为 (n_features,) 的数组, default=np.inf

可能的最大插补值。如果为标量,则广播到形状 (n_features,) 。如果为数组,则期望形状 (n_features,) ,每个特征一个最大值。默认值为 np.inf

Changed in version 0.23: 添加了对数组类型的支持。

verboseint, default=0

控制调试消息的详细程度标志。越高越详细。可以是 0、1 或 2。

random_stateint, RandomState 实例或 None, default=None

使用的伪随机数生成器的种子。如果 n_nearest_features 不是 None ,则随机选择估计器特征,如果 random ,则随机选择插补顺序,如果 sample_posterior=True ,则从后验采样。使用整数以确保确定性。 请参阅 the Glossary

add_indicatorbool, default=False

如果为 True ,则 MissingIndicator 转换将堆叠到插补器的转换输出上。这允许预测估计器在插补的情况下考虑缺失值。如果特征在 fit/train 时间没有缺失值,即使在 transform/test 时间有缺失值,该特征也不会出现在缺失指示器上。

keep_empty_featuresbool, default=False

如果为 True ,则在调用 fit 时完全由缺失值组成的特征将在调用 transform 时返回。插补值始终为 0 ,除非 initial_strategy="constant" ,在这种情况下将使用 fill_value

Added in version 1.2.

Attributes:
initial_imputer_SimpleImputer 类型的对象

用于初始化缺失值的插补器。

imputation_sequence_元组列表

每个元组包含 (feat_idx, neighbor_feat_idx, estimator) ,其中 feat_idx 是当前要插补的特征, neighbor_feat_idx 是用于插补当前特征的其他特征数组, estimator 是用于插补的训练估计器。长度为 self.n_features_with_missing_ * self.n_iter_

n_iter_int

发生的迭代轮次数。如果达到提前停止条件,则将少于 self.max_iter

n_features_in_int

fit 期间看到的特征数量。

Added in version 0.24.

feature_names_in_形状为 ( n_features_in_ ,) 的 ndarray

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

Added in version 1.0.

n_features_with_missing_int

具有缺失值的特征数量。

indicator_MissingIndicator

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

random_state_RandomState 实例

生成的 RandomState 实例,可以是来自种子、随机数生成器或 np.random

See also

SimpleImputer

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

KNNImputer

使用最近样本估计缺失特征的多变量插补器。

Notes

为了支持归纳模式中的插补,我们在 fit 阶段存储每个特征的估计器,并在 transform 阶段按顺序预测而不重新拟合。

fit 时包含所有缺失值的特征在 transform 时将被丢弃。

使用默认值,插补器在 \(\mathcal{O}(knp^3\min(n,p))\) 中缩放,其中 \(k\) = max_iter\(n\) 是样本数量,\(p\) 是特征数量。因此,当特征数量增加时,它变得非常昂贵。设置 n_nearest_features << n_featuresskip_complete=True 或增加 tol 可以帮助减少其计算成本。

根据缺失值的性质,在预测上下文中,简单插补器可能更可取。

References

Examples

>>> import numpy as np
>>> from sklearn.experimental import enable_iterative_imputer
>>> from sklearn.impute import IterativeImputer
>>> imp_mean = IterativeImputer(random_state=0)
>>> imp_mean.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
IterativeImputer(random_state=0)
>>> X = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
>>> imp_mean.transform(X)
array([[ 6.9584...,  2.       ,  3.        ],
       [ 4.       ,  2.6000...,  6.        ],
       [10.       ,  4.9999...,  9.        ]])

有关更详细的示例,请参阅 在构建估计器之前填补缺失值使用不同变体的迭代插补法填补缺失值

fit(X, y=None, **fit_params)#

拟合输入器在 X 上并返回自身。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

y忽略

未使用,为了保持API一致性而存在。

**fit_paramsdict

通过元数据路由API路由到子估计器 fit 方法的参数。

Added in version 1.5: 仅在 sklearn.set_config(enable_metadata_routing=True) 设置时可用。有关更多详细信息,请参阅 Metadata Routing User Guide

Returns:
selfobject

拟合的估计器。

fit_transform(X, y=None, **params)#

拟合输入器在 X 上并返回转换后的 X

Parameters:
Xarray-like, shape (n_samples, n_features)

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

y忽略

未使用,为了保持API一致性而存在。

**paramsdict

通过元数据路由API路由到子估计器 fit 方法的参数。

Added in version 1.5: 仅在 sklearn.set_config(enable_metadata_routing=True) 设置时可用。有关更多详细信息,请参阅 Metadata Routing User Guide

Returns:
Xtarray-like, shape (n_samples, n_features)

插补后的输入数据。

get_feature_names_out(input_features=None)#

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

Parameters:
input_features字符串数组或None,默认=None

输入特征。

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

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

Returns:
feature_names_out字符串对象的ndarray

变换后的特征名称。

get_metadata_routing()#

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

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

Added in version 1.5.

Returns:
routingMetadataRouter

MetadataRouter 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_transform 的输出。

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

  • "pandas" : DataFrame 输出

  • "polars" : Polars 输出

  • None : 转换配置不变

Added in version 1.4: "polars" 选项已添加。

Returns:
self估计器实例

估计器实例。

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

transform(X)#

填补 X 中所有的缺失值。

注意,这是随机的,并且如果 random_state 没有固定,重复调用或输入数据被打乱,结果将会不同。

Parameters:
Xarray-like of shape (n_samples, n_features)

需要填补的输入数据。

Returns:
Xtarray-like, shape (n_samples, n_features)

填补后的输入数据。