Scikit Learn Pipeline的自定义转换器



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

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

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的转换器。例如,可以在不平衡学习包中找到实现:请参阅此处。检查这个包 - 如果你需要上采样,那么你的上采样方法可能已经在不平衡学习中实现。

最新更新