如何使用自定义函数创建 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
或其官方文档的更多信息。