具有直通参数的 Scikit Learn 机器学习管道

Scikitlearn machine learning pipeline with passthrough parameters

我已经实现了 3 TransformerMixin 类 来尝试制作我自己的 scikitlearn Pipeline。但是,我无法将它们组合起来,因为 PrepareModel 对象使用来自 FeatureEngineering 对象的信息。特别是,考虑:

cleaner = DataCleaner()
df_clean = cleaner.fit_transform(df)
engineering = FeatureEngineering()
df_engineered = engineering.fit_transform(df_clean)
modelprep = PrepareModel(engineering.des_features)
X = modelprep.fit_transform(df_engineered)

请注意,DataCleanerFeatureEngineeringPrepareModel 都是 TransformerMixin 的子 类。

如何使用此设置制作 Pipeline

from sklearn.pipeline import Pipeline  
full_pipeline = Pipeline([('cleaner', DataCleaner()), 
                          ('engineering', FeatureEngineering()),
                          ('prepare', PrepareModel())])

我遇到的问题是第三步需要第二步的des_features所以这行不通。我该如何使它工作?

这目前不容易做到; "metadata routing" SLEP006.

可能是另一个 use-case

在此示例中,由于您拥有所有转换器,因此您可以通过将属性附加到输出数据集来将某些东西组合在一起:

class FeatureEngineering(...):
    ...

    def transform(self, X):
        ...
        return_value.metadata = self.des_features
        return return_value

class PrepareModel(...):
    ...

    def fit(self, X, y=None):
        self.des_features = X.metadata
        ...