如何使用回归量估算多列的缺失值?

How to impute missing values for multiple columns using a regressor?

这是我拥有的更大数据集的示例。

假设我有一个包含不同列的数据框,并且每列在某些部分都存在缺失值 (NaN)。

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor

df = pd.DataFrame({'a':[0.3, 0.2, 0.5, 0.1, 0.4, 0.5, np.nan, np.nan, np.nan, 0.6, 0.3, 0.5],
                   'b':[4, 3, 5, np.nan, np.nan, np.nan, 5, 6, 5, 8, 7, 4],
                   'c':[20, 25, 35, 30, 10, 18, 16, 22, 26, np.nan, np.nan, np.nan]})

我想使用 RandomForestRegressor 来预测这些缺失值,例如,将其他列作为特征。换句话说,当我看到一个带有 NaN 的样本时,我想使用其他两列上的值作为特征来预测这个缺失值。

我通常可以针对独特的功能执行此操作,但我想要一种针对每一列执行此操作的自动化方法。

谢谢。

您可以使用 sklearn 中的 IterativeImputer 并在估算器参数中为其提供 RandomForestRegressor

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

df = pd.DataFrame({'a':[0.3, 0.2, 0.5, 0.1, 0.4, 0.5, np.nan, np.nan, np.nan, 0.6, 0.3, 0.5],
                   'b':[4, 3, 5, np.nan, np.nan, np.nan, 5, 6, 5, 8, 7, 4],
                   'c':[20, 25, 35, 30, 10, 18, 16, 22, 26, np.nan, np.nan, np.nan]})

imp_mean = IterativeImputer(estimator=RandomForestRegressor(), random_state=0)
imp_mean.fit(df)
display(pd.DataFrame(imp_mean.transform(df)))

这将 return 以下数据框,其中相应地估算了 nan 值:

0   1   2
0   0.300   4.00    20.00
1   0.200   3.00    25.00
2   0.500   5.00    35.00
3   0.100   3.69    30.00
4   0.400   5.53    10.00
5   0.500   5.78    18.00
6   0.389   5.00    16.00
7   0.455   6.00    22.00
8   0.463   5.00    26.00
9   0.600   8.00    21.02
10  0.300   7.00    16.92
11  0.500   4.00    29.98