使用自定义功能在sklearn中创建管道?

时间:2019-06-12 01:35:56

标签: python scikit-learn pipeline

如何使用自定义功能创建sklearn管道? 我有两个功能,一个用于清理数据,第二个用于构建模型。

def preprocess(df):
   ……………….
   # clean data
   return df_clean

def model(df_clean):
   …………………
   #split data train and test and build randomForest Model
   return model

所以我使用FunctionTransformer并创建了管道

from sklearn.pipeline import Pipeline, make_pipeline
from sklearn.preprocessing import FunctionTransformer

pipe = Pipeline([("preprocess", FunctionTransformer(preprocess)),("model",FunctionTransformer(model))])

pred = pipe.predict_proba(new_test_data)
print(pred)

我知道上面是错误的,不确定如何处理,在管道中我需要先通过训练数据,然后我必须通过new_test_data?

2 个答案:

答案 0 :(得分:2)

您需要创建自己的类,该类继承sklearn的BaseEstimator,TransformerMixin。

然后在您自己的类的fit / transform / fit_transform / predict / predict_prob等函数中指定函数。

Put customized functions in Sklearn pipeline

答案 1 :(得分:0)

一个更好、更简单的方法是使用 Kedro,它不关心对象类型,您可以编写任何自定义函数以在管道内使用。您可以使用 kedro.Pipeline 将所有函数按顺序排列并像在 sklearn 管道中一样调用它们。语法与 sklearn 略有不同,但更灵活。

您可以了解有关 kedro here 或其官方文档的更多信息。