我正在使用来自 sklearn 的简单输入器输入我的数据。我想测试对数据应用转换的许多不同方法。即对于逻辑回归,我想
- 删除 nans 并替换为 mode
- 将 +infs 替换为 max,将 -infs 替换为 min
- 使用标准定标器。
然后使用 xgboost 我想:
- 只需将 -infs/+infs 替换为非常大或 -ve 大的数字。
我一直在玩 sklearn 管道,我想知道如何通过管道传递自定义输入器?例如:
logistic_pipeline = Pipeline( steps = [('imputer', SimpleImputer(strategy = 'most frequent') ),
( 'std_scaler', StandardScaler() ),
( 'model', LinearRegression() )] )
但是我如何将以下函数合并到其中我将训练数据(df)中的 infs 替换为该列的最大值。然后使用此最大值将其填充到测试中。我如何使用管道来做到这一点?
def replace_pos_inf(df, dftest, numeric_features):
for col in df[numeric_features].columns:
m = df.loc[df[col] != np.inf, col].max()
df[col].replace(np.inf,m,inplace=True)
dftest[col].replace(np.inf,m,inplace=True)
for col in df[numeric_features].columns:
mini = df.loc[df[col] != -np.inf, col].min()
df[col].replace(-np.inf,mini,inplace=True)
dftest[col].replace(-np.inf,mini,inplace=True)
return df,dftest