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

Posted

技术标签:

【中文标题】使用自定义函数在 sklearn 中创建管道?【英文标题】:Creating pipeline in sklearn with custom functions? 【发布时间】:2019-10-26 10:59:44 【问题描述】:

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

【问题讨论】:

***.com/questions/31259891/… 这能回答你的问题吗? Put customized functions in Sklearn pipeline 【参考方案1】:

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

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

Put customized functions in Sklearn pipeline

【讨论】:

【参考方案2】:

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

您可以了解更多关于kedrohere 或其官方文档的信息。

【讨论】:

以上是关于使用自定义函数在 sklearn 中创建管道?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Scikit-learn 的管道中创建我们的自定义特征提取器函数并将其与 countvectorizer 一起使用

将额外参数传递给 sklearn 管道中的自定义评分函数

如何为 sklearn.svm.SVC 定义自定义内核函数?

用于自定义操作的 sklearn 管道

如何在 Android Studio 中创建自定义图像按钮?

如何在 Blend 中创建自定义列表