迭代插补#

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)[source]#

一种多元插补器,它根据所有其他特征来估计每个特征。

这是一种通过轮流方式将每个具有缺失值的特征建模为其他特征的函数来插补缺失值的策略。

更多信息请参见 用户指南

版本 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_values整数或 np.nan,默认值=np.nan

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

sample_posterior布尔值,默认值=False

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

max_iter整数,默认值=10

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

tol浮点数,默认值=1e-3

停止条件的容差。

n_nearest_features整数,默认值=None

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

initial_strategy{'mean','median','most_frequent','constant'},默认值='mean'

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

fill_value字符串或数值,默认值=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_complete布尔值,默认值=False

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

min_valuefloat 或 array-like,形状为 (n_features,),默认为 -np.inf

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

0.23版本中的变更: 增加了对 array-like 的支持。

max_valuefloat 或 array-like,形状为 (n_features,),默认为 np.inf

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

0.23版本中的变更: 增加了对 array-like 的支持。

verboseint,默认为 0

详细程度标志,控制在评估函数时发出的调试消息。数值越高,越详细。可以为 0、1 或 2。

random_stateint、RandomState 实例或 None,默认为 None

要使用的伪随机数生成器的种子。如果n_nearest_features不为None,则随机选择估计器的特征;如果为random,则随机化imputation_order;如果sample_posterior=True,则随机抽样后验。使用整数以确保确定性。参见词汇表

add_indicatorbool,默认为 False

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

keep_empty_featuresbool,默认为 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_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当X具有全是字符串的特征名称时才定义。

1.0版本中新增。

n_features_with_missing_int

具有缺失值的特征数量。

indicator_MissingIndicator

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

random_state_RandomState 实例

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

另请参见

SimpleImputer

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

KNNImputer

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

备注

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

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

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

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

参考文献

示例

>>> 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)[source]#

X 上拟合插补器并返回自身。

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

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

y忽略

未使用,出于 API 一致性约定而存在。

**fit_params字典

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

1.5 版本中新增: 仅当设置了 sklearn.set_config(enable_metadata_routing=True) 时才可用。有关详细信息,请参见 元数据路由用户指南

返回:
self对象

已拟合的估计器。

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

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

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

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

y忽略

未使用,出于 API 一致性约定而存在。

**params字典

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

1.5 版本中新增: 仅当设置了 sklearn.set_config(enable_metadata_routing=True) 时才可用。有关详细信息,请参见 元数据路由用户指南

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

已插补的输入数据。

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字符串对象数组

转换后的特征名称。

get_metadata_routing()[source]#

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

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

1.5 版本中新增。

返回:
routingMetadataRouter

一个 MetadataRouter,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

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

返回:
params字典

参数名称与其值的映射。

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

设置输出容器。

参见 set_output API 介绍,了解如何使用该 API 的示例。

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

配置transformfit_transform的输出。

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

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 变换配置保持不变

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

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

估算X中所有缺失值。

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

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

要补充的输入数据。

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

已插补的输入数据。