具有直通参数的 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)
请注意,DataCleaner
、FeatureEngineering
、PrepareModel
都是 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
...
我已经实现了 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)
请注意,DataCleaner
、FeatureEngineering
、PrepareModel
都是 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
...