详解 Scikit-learn 的 impute.IterativeImputer函数:缺失值填充器

  • Post category:Python

sklearn.impute.IterativeImputer是Scikit-learn中的缺失值填补方法之一,其主要作用是通过多次回归估计缺失值的值。这个方法在非常适用于数据集缺失较多的情况下进行缺失值填补,并且能够利用其他相关变量的信息来填补缺失值。

该函数的使用方法如下:

from sklearn.impute import IterativeImputer
imputer = IterativeImputer(estimator=None, max_iter=10, random_state=None, add_indicator=False, verbose=0)

其中,参数解释如下:
estimator: 表示使用的回归估计器,默认为 BayesianRidge)。也可以使用其他的回归估计器,例如 RandomForestRegressorGradientBoostingRegressor 等。
max_iter: 表示单个缺失值的填充迭代次数,默认为10次。
random_state: 表示输入随机种子,可以保证填充的结果可重复。
add_indicator: 表示是否添加一个 0/1 蒙版矩阵用于指示填充的位置。如果缺失值已经被正确地标记出来,可以不关注该参数。
verbose: 表示是否输出填充时的 log 信息。

对于给定的缺失数据集 X,可以通过以下方式进行填补:

imputer.fit(X)
X_imputed = imputer.transform(X)

其中,X_imputed 为填补后的数据集。

接下来给出两个实际例子:

第一个实例,我们使用 IterativeImputer 对口腔癌数据集(Oral cancer (KUCO))中缺失的数据进行填补。代码如下:

from sklearn.datasets import fetch_openml
from sklearn.impute import IterativeImputer
from sklearn.ensemble import RandomForestRegressor

X, y = fetch_openml(name='OralToWrittenTranslation', return_X_y=True, as_frame=True)

# 标记位置
missing = X.isna()

# 填补缺失值
imputer = IterativeImputer(estimator=RandomForestRegressor(random_state=0, n_estimators=10), random_state=0)
imputed_X = imputer.fit_transform(X)

# 检查填补结果
assert np.all(X.columns == imp.columns)
assert np.all(X.index == imp.index)
assert np.isnan(imp[missing])

第二个实例,我们使用 IterativeImputer 对 iris 数据集中的缺失数据进行填补。代码如下:

from sklearn.datasets import load_iris
from sklearn.impute import IterativeImputer
from sklearn.linear_model import BayesianRidge

X, y = load_iris(return_X_y=True)
X.ravel()[np.random.choice(X.size, 15, replace=False)] = np.nan  # 制造缺失值

# 填补缺失值
imputer = IterativeImputer(estimator=BayesianRidge(), random_state=0)
imputed_X = imputer.fit_transform(X)

# 检查填补结果
assert np.all(X[~np.isnan(X)] == imp[~np.isnan(X)])

以上是 IterativeImputer 的简单使用方法,使用该方法需要注意选择合适的回归方法,并根据实际情况进行参数调优。