具有多个输入/输出的 SKlearn 管道



如何构建 sklearn 管道来执行以下操作?

我有什么:

A, B = getAB(X_train)
X_train = transform(X_train)
model(A, B, X_train)

我想要什么:

pipe = Pipeline([
(‘ab’, getAB),
(‘tranf’, transform),
(‘net’, net)
]
pipe.fit(X_train, y_train)

请帮忙!

是的,通过编写具有拟合/转换函数的自定义转换器是可行的。这可以是您的类:

from sklearn.base import BaseEstimator, TransformerMixin
def getABTransformer(BaseEstimator, TransformerMixin):
def __init__(self): # no *args or **kargs
pass
def fit(self, X, y=None):
return self # nothing else to do
def transform(self, X, y=None):
return getAB(X)

然后,您可以按如下方式创建ColumnTransformer

from sklearn.compose import ColumnTransformer
clm_pipe = ColumnTransformer([
(‘ab’, getABTransformer, np.arange(0, len(X_train)),  # list of columns indices
(‘tranf’, transform, np.arange(0, len(X_train))),  # list of columns indices
]

以及带有模型的最终管道:

pipe = Pipeline([
(‘clm_pipe’, clm_pipe),
(‘net’, net)
]

您可以阅读有关 ColumnTransformer 的更多信息

最新更新