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
期间没有缺失值时,将仅使用初始插补方法进行插补。如果你有许多在fit
和transform
期间都没有缺失值的特征,设置为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
。
- initial_imputer_
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_features
,skip_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_features
是None
,则使用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
配置
transform
和fit_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)
填补后的输入数据。