如何使用回归器为多个列估算缺失值?

问题描述

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

想象一下,我有一个包含不同列的数据框,并且每一列在某些部分都存在缺失值(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,np.nan,0.6,0.3,0.5],'b':[4,3,5,6,8,7,4],'c':[20,25,35,30,10,18,16,22,26,np.nan]})

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

我通常可以针对独特功能执行此操作,但是我希望对每一列都执行自动操作。

谢谢。

解决方法

您可以使用sklearn中的IterativeImputer,并在estimator参数中为其提供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,np.nan,0.6,0.3,0.5],'b':[4,3,5,6,8,7,4],'c':[20,25,35,30,10,18,16,22,26,np.nan]})

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

然后将返回以下数据帧,其中将相应推算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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...