您可以创建自己的转换器对象来为您执行列选择。当您将要提取的列放入管道时,您会将其作为参数传递。通过在您的管道中,它将与您的其余步骤一起被腌制。
为了包含这个自定义转换器,您的类需要从两个基本 sklearn 类继承:TransformerMixin 和 BaseEstimator。只要您自己定义fit 和transform,从TransformerMixin 继承即可为您提供fit_transform 方法。从BaseEstimator 继承提供get_params 和set_params。由于 fit 方法除了返回对象本身不需要做任何事情,您真正需要做的就是定义 transform 方法。
这是一个示例,假设您的数据 (X) 是 pandas DataFrame,您可以传入要提取的列名列表。
from sklearn.base import BaseEstimator, TransformerMixin
class FeatureSelector(BaseEstimator, TransformerMixin):
def __init__(self, feature_names):
self._feature_names = feature_names
def fit(self, X, y = None):
return self
def transform(self, X, y = None):
return X[self._feature_names]
现在您已经有了转换器,您可以将它包含在您的管道中,它可以按照您的要求进行腌制。
至于您不使用FunctionTransformer 的要求,我假设您看到了示例here,他们在其中全局定义了all_but_first_column。使用上面定义的FeatureSelector 类,您总是可以将all_but_first_column 之类的东西作为另一种方法移动到该类中。