使用自定义函数在 sklearn 中创建管道



如何使用自定义函数创建 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?

你需要创建自己的类来继承 sklearn 的 BaseEstimator、TransformerMixin。

然后在你自己类的拟合/转换/fit_transform/预测/predict_prob等函数中指定你的函数。

将自定义函数放入 Sklearn 管道中

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

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

最新更新