Machine learning 如何使用回归器为多列计算缺失值?
这是我拥有的更大数据集的一个示例 假设我有一个具有不同列的数据框架,并且每一列在某些部分都存在缺失值(NaN)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],
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
听起来很奇怪。这些功能有任何链接吗?通常,这种填充方法只使用同一列,并使用平均值或其他值。你想怎么开始?如果对第一列执行此操作,此值将用于第二列…在真实数据集中,特征之间具有相关关系。问题是,它们中的许多都缺少值,我不能简单地删除它们。我需要找到一个好的方法来估计这些价值。这对我来说很奇怪。这些功能有任何链接吗?通常,这种填充方法只使用同一列,并使用平均值或其他值。你想怎么开始?如果对第一列执行此操作,此值将用于第二列…在真实数据集中,特征之间具有相关关系。问题是,它们中的许多都缺少值,我不能简单地删除它们。我需要找到一个好的方法来估计这些价值,这正是我所需要的。非常感谢你,金唐!这绝对是我需要的。非常感谢你,金唐!