Scikit Learn Pipeline 的自定义变压器

mac*_*ery 2 python pipeline machine-learning scikit-learn

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

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

Mik*_*bov 5

scikit-learn 转换器无法更改样本数量,API 不支持这一点 - 请参阅http://scikit-learn.org/stable/modules/ generated/sklearn.base.TransformerMixin.html#sklearn.base.TransformerMixin。 fit_transform - 记录 X、y 和 X_new 的尺寸。另请注意,它们仅返回 X,而不返回 y - 这意味着如果更改 X 维度,它将不再匹配 y 维度。

一种方法是在管道外运行它 - 生成用于训练的新样本并将其放入管道,并且不生成用于测试的新样本。但它不会起作用,例如交叉验证。

为了使其适用于交叉验证和模型选择,您需要一个自定义 Pipeline 类,该类支持更改 n_samples 的转换器。例如,可以在不平衡学习包中找到一个实现:请参阅此处。检查这个包 - 如果您需要上采样,那么您的上采样方法可能已经在不平衡学习中实现。