繁体   English   中英

sklearn.iterativeimputer 和 pandas.interpolate(method='linear') 有什么不同?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM