我一直在尝试为sklearn
Pipeline
体系结构设计一个转换器,它可以在管道过程中过滤和删除符合某些条件的记录-如果愿意的话,可以使用WHERE
子句。我找到了这样一个答案:;从现有版本的scikit-learn开始,任何丢弃或添加样本的变压器都不符合API";,但这是7年前的事了。事情发生了变化吗?如果没有,Pipeline
哲学的一个好的陈述是什么,可以解释为什么删除记录不符合其概念?(我当然明白为什么添加样本没有意义,我认为我明白为什么删除可能没有意义,但我想阅读官方原因,以便更好地理解围绕API的想法。(
此语句至今仍然有效。
我不知道任何";官方的";scikit-learn
文档中的声明,该声明解决了此问题或证明了此设计选择的合理性。然而,我认为这不受支持的主要原因是Pipeline
对象只转换X
。至少对此,有一个来源:
管道只转换观测到的数据(
X
(。
因此,如果将任何样本删除或添加到X
,则样本数将与y
不一致。我认为这是这个设计选择的最可能的原因。
也就是说,imblearn
的管道实现实际上允许改变样本大小的转换,因为它允许在管道中包括重采样器(请参阅此处(。但是,这仅限于符合imblearn
API方法的采样方法。