Machine learning 如何使用回归器为多列计算缺失值?

Machine learning 如何使用回归器为多列计算缺失值?,machine-learning,scikit-learn,regression,missing-data,imputation,Machine Learning,Scikit Learn,Regression,Missing Data,Imputation,这是我拥有的更大数据集的一个示例 假设我有一个具有不同列的数据框架,并且每一列在某些部分都存在缺失值(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],

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

假设我有一个具有不同列的数据框架,并且每一列在某些部分都存在缺失值(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的
迭代插补器
,并在估计器参数中为其提供
随机森林回归器

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)))
然后,这将返回以下数据帧,其中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

您可以使用sklearn中的
迭代插补器
,并在估计器参数中为其提供
随机森林回归器

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)))
然后,这将返回以下数据帧,其中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

听起来很奇怪。这些功能有任何链接吗?通常,这种填充方法只使用同一列,并使用平均值或其他值。你想怎么开始?如果对第一列执行此操作,此值将用于第二列…在真实数据集中,特征之间具有相关关系。问题是,它们中的许多都缺少值,我不能简单地删除它们。我需要找到一个好的方法来估计这些价值。这对我来说很奇怪。这些功能有任何链接吗?通常,这种填充方法只使用同一列,并使用平均值或其他值。你想怎么开始?如果对第一列执行此操作,此值将用于第二列…在真实数据集中,特征之间具有相关关系。问题是,它们中的许多都缺少值,我不能简单地删除它们。我需要找到一个好的方法来估计这些价值,这正是我所需要的。非常感谢你,金唐!这绝对是我需要的。非常感谢你,金唐!