使用自定义函数在 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 略有不同且更灵活。
您可以了解更多关于kedro
here 或其官方文档的信息。
【讨论】:
以上是关于使用自定义函数在 sklearn 中创建管道?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Scikit-learn 的管道中创建我们的自定义特征提取器函数并将其与 countvectorizer 一起使用
如何为 sklearn.svm.SVC 定义自定义内核函数?