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
)。也可以使用其他的回归估计器,例如 RandomForestRegressor
、GradientBoostingRegressor
等。
– 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 的简单使用方法,使用该方法需要注意选择合适的回归方法,并根据实际情况进行参数调优。