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)[源代码]#

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

一种缺失值填补策略,通过将每个带有缺失值的特征建模为其他特征的函数,并以轮询(round-robin)方式进行迭代填补。

更多详情请参阅 用户指南

0.21 版本新增。

注意

该估计器目前仍处于 实验阶段:其预测结果和 API 可能会在没有任何弃用周期的情况下发生变化。若要使用它,您需要显式导入 enable_iterative_imputer

>>> # explicitly require this experimental feature
>>> from sklearn.experimental import enable_iterative_imputer  # noqa
>>> # now you can import normally from sklearn.impute
>>> from sklearn.impute import IterativeImputer
参数:
estimator估计器对象, 默认=BayesianRidge()

在轮询填补的每个步骤中使用的估计器。如果 sample_posterior=True,则该估计器必须在其 predict 方法中支持 return_std 参数。

missing_valuesint 或 np.nan, 默认=np.nan

缺失值的占位符。所有出现的 missing_values 都将被填补。对于具有可为空整数类型(nullable integer dtypes)且包含缺失值的 pandas 数据框,由于 pd.NA 将被转换为 np.nan,因此 missing_values 应设置为 np.nan

sample_posteriorbool, 默认=False

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

max_iterint, 默认=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, 默认=None

用于估计每个特征列缺失值的其他特征的数量。特征之间的接近程度是使用每对特征之间的绝对相关系数(在初始填补后)来衡量的。为了确保在整个填补过程中覆盖特征,相邻特征不一定是绝对最近的,而是以与每个被填补目标特征的相关性成比例的概率抽取的。当特征数量巨大时,这可以显著提高速度。如果为 None,则将使用所有特征。

initial_strategy{‘mean’, ‘median’, ‘most_frequent’, ‘constant’}, 默认=’mean’

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

fill_valuestr 或数值, 默认=None

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

在版本 1.3 中新增。

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

特征填补的顺序。可能的值包括:

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

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

  • 'roman': 从左到右。

  • 'arabic': 从右到左。

  • 'random': 每轮填补使用随机顺序。

skip_completebool, 默认=False

如果为 True,则在 fit 期间没有任何缺失值,但在 transform 期间出现缺失值的特征,将仅使用初始填补方法进行填补。如果您有许多在 fittransform 时都没有缺失值的特征,请设置为 True 以节省计算资源。

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

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

在 0.23 版本中更改: 添加了对类数组的支持。

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

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

在 0.23 版本中更改: 添加了对类数组的支持。

verboseint, default=0

详细程度标志,控制函数执行时输出的调试信息。数值越高,输出越详细。可以为 0、1 或 2。

random_stateint, RandomState instance or None, default=None

使用的伪随机数生成器的种子。当 n_nearest_features 不为 None 时随机化估计器特征的选择,当 imputation_orderrandom 时随机化顺序,以及当 sample_posterior=True 时从后验分布中采样。使用整数以获得确定性结果。参见 术语表

add_indicatorbool, default=False

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

keep_empty_featuresbool, default=False

如果为 True,则在调用 fit 时完全由缺失值组成的特征,在调用 transform 时的结果中予以保留。填补值始终为 0,除非 initial_strategy="constant",在这种情况下将使用 fill_value 代替。

1.2 版本新增。

属性:
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

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

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

1.0 版本新增。

n_features_with_missing_int

带有缺失值的特征数量。

indicator_MissingIndicator

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

random_state_RandomState 实例

由种子、随机数生成器或 np.random 生成的 RandomState 实例。

另请参阅

SimpleImputer

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

KNNImputer

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

注意事项

为了支持归纳(inductive)模式下的填补,我们在 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

示例

>>> 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.        ]])

有关更详细的示例,请参见 在构建估计器之前填补缺失值使用 IterativeImputer 变体填补缺失值

fit(X, y=None, **fit_params)[源代码]#

X 上拟合填补器并返回 self。

参数:
Xarray-like, shape (n_samples, n_features)

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

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

**fit_paramsdict

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

1.5 版本中新增: 仅在设置了 sklearn.set_config(enable_metadata_routing=True) 时可用。更多详情请参见 元数据路由用户指南

返回:
selfobject

拟合的估计器。

fit_transform(X, y=None, **params)[源代码]#

X 上拟合填补器并返回转换后的 X

参数:
Xarray-like, shape (n_samples, n_features)

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

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

**paramsdict

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

1.5 版本中新增: 仅在设置了 sklearn.set_config(enable_metadata_routing=True) 时可用。更多详情请参见 元数据路由用户指南

返回:
Xt形状为 (n_samples, n_features) 的类数组

已填补的输入数据。

get_feature_names_out(input_features=None)[源代码]#

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

参数:
input_featuresarray-like of str or None, default=None

输入特征。

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

  • 如果 input_features 是 array-like,则如果定义了 feature_names_in_input_features 必须与 feature_names_in_ 匹配。

返回:
feature_names_outstr 对象的 ndarray

转换后的特征名称。

get_metadata_routing()[源代码]#

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

请查阅 用户指南,了解路由机制如何工作。

1.5 版本新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deepbool, default=True

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

返回:
paramsdict

参数名称映射到其值。

set_output(*, transform=None)[源代码]#

设置输出容器。

请参阅 用户指南 以了解更多详细信息,并参考 引入 set_output API 获取关于如何使用该 API 的示例。

参数:
transform{“default”, “pandas”, “polars”}, default=None

配置 transformfit_transform 的输出。

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

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 转换配置保持不变

1.4 版本新增: 添加了 "polars" 选项。

返回:
selfestimator instance

估计器实例。

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

transform(X)[源代码]#

填补 X 中的所有缺失值。

请注意,这是随机的,如果 random_state 未固定,则重复调用或排列输入后的结果将有所不同。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

要完成的输入数据。

返回:
Xt形状为 (n_samples, n_features) 的类数组

已填补的输入数据。