我正在使用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的尺寸。另外,请注意,它们仅返回X,而不返回y-这意味着,如果更改X尺寸,它将不再与y尺寸匹配。
一种方法是在管道外部运行它-生成用于训练的新样本并将其放到管道中,而不生成用于测试的新样本。但是它不能与交叉验证一起使用。
为了使其能够用于交叉验证和模型选择,您需要一个自定义的Pipeline类,该类支持更改n_samples的转换器。例如,可以在不平衡学习包中找到一个实现:请参见此处。检查此程序包-如果您需要上采样,那么您的上采样方法可能已经在不平衡学习中实现了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句