[英]how different with sklearn.iterativeimputer and pandas.interpolate(method='linear')?
sklearn.impute.IterativeImputer(estimator='linear')
和pandas.interpolate(method='linear')
怎么样?
如果任何对此有所了解的人可以简单地提及它,我将不胜感激
顾名思义, pandas.interpolate(method='linear')
假设您的行是有序的,并通过取前后值的平均值来填充每列中的 NaN。
例如:
import pandas as pd
X = pd.DataFrame([[7, 2, 3], [4, np.nan, 6], [10, 5, 9],[np.nan,7,12],[5,9,14]])
0 1 2
0 7.0 2.0 3
1 4.0 NaN 6
2 10.0 5.0 9
3 NaN 7.0 12
4 5.0 9.0 14
如果我们执行 X.interpolate(method="linear"),我们可以看到在第一列中,NaN 由 (10+5) / 2 = 7.5 填充,第二列中的 NaN 由 (2 + 5)/ 2 = 3.5。
X.interpolate(method="linear")
0 1 2
0 7.0 2.0 3
1 4.0 3.5 6
2 10.0 5.0 9
3 7.5 7.0 12
4 5.0 9.0 14
因此,您可以看到这种插补的发生独立于其他列或变量。
对于sklearn.impute.IterativeImputer
它有点复杂。 默认情况下(设置 initial_strategy = "mean"),它通过填充列的平均值来估算缺失值。 在这个插补矩阵上,它适合使用您的列作为因变量插补而其他列作为独立的模型。 在此模型中,它会根据您在其他列中的非缺失条目来预测缺失值。 默认情况下,使用的模型是BayesianRidge()
。
举个例子:
from sklearn.linear_model import BayesianRidge
from sklearn.impute import SimpleImputer
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
imputed_X = SimpleImputer(strategy="mean").fit_transform(X)
imputed_X
array([[ 7. , 2. , 3. ],
[ 4. , 5.75, 6. ],
[10. , 5. , 9. ],
[ 6.5 , 7. , 12. ],
[ 5. , 9. , 14. ]])
您可以看到缺失值被列的平均值替换。 现在进行模型拟合,以第一列为例:
mdl = BayesianRidge().fit(imputed_X[:,1:],imputed_X[:,0])
mdl.predict(X.loc[[3],1:])
array([6.49820435])
您在第一列第 3 行中获得相同的值 6.49820435,其中缺失值以前是:
IterativeImputer(random_state=0).fit_transform(X)
array([[ 7. , 2. , 3. ],
[ 4. , 4.30503804, 6. ],
[10. , 5. , 9. ],
[ 6.4987435 , 7. , 12. ],
[ 5. , 9. , 14. ]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.