Scikit Learn 管道的自定义转换器

Custom transformer for Scikit Learn Pipeline

我正在使用 Scikit 学习管道对象,因为我有一系列任务要执行(上采样、特征选择、分类)。我的上采样方法是自定义的,这意味着我必须为管道实现自定义转换器。

转换器必须具有转换和拟合方法。当然我只想上采样训练数据而不是测试数据。这是否意味着我只需要实现 fit 方法而不是 transform 方法(对传递给 fit 方法的数据集进行上采样)?据我了解,转换方法适用于训练和测试集...

scikit-learn 转换器无法更改样本数,API 不支持此功能 - 请参阅 http://scikit-learn.org/stable/modules/generated/sklearn.base.TransformerMixin.html#sklearn.base.TransformerMixin.fit_transform - 请注意 X、y 和 X_new 的维度。另外,请注意它们 return 仅 X,而不是 y - 这意味着如果您更改 X 维度,它将不再匹配 y 维度。

一种方法是 运行 它在管道之外 - 生成新的训练样本并将它们放入管道,而不生成新的测试样本。但它不会工作,例如cross-vaidation.

要使其适用于 cross-validation 和模型选择,您需要一个自定义管道 class,它支持改变 n_samples 的转换器。例如,可以在 imbalanced-learn package: see here 中找到实现。检查此包 - 如果您需要上采样,那么也许您的上采样方法已经在 imbalanced-learn.

中实现