sklearn 管道并过滤掉记录?

sklearn pipelines and filtering out records?

我一直在尝试为 sklearn Pipeline 架构设计一个转换器,它实际上过滤和删除在管道过程中满足特定条件的记录 - WHERE条款,如果你愿意的话。我发现 this SO answer 说“从现有版本的 scikit-learn 开始,任何删除或添加样本的转换器都不符合 API”,但它是 7 年前的。事情是否发生了变化?如果没有,Pipeline 哲学的一个很好的陈述是什么来解释为什么删除记录不符合其概念? (我完全明白为什么添加样本没有意义,我 认为 我明白为什么删除可能没有意义,但我想阅读官方原因以便更好地理解围绕 API.)

的思考

此声明在今天仍然有效。

我不知道 scikit-learn 的文档中有任何“官方”声明解决了这个问题或证明了这个设计选择。但是,我认为不支持的主要原因是 Pipeline 对象仅转换 X。至少为此,有一个 source:

Pipelines only transform the observed data (X).

因此,如果您将任何样本删除或添加到 X,样本数量将与 y 不一致。我认为这是这种设计选择的最可能原因。

也就是说,imblearn 的管道实现实际上允许改变样本大小的转换,因为它允许在管道中包含重采样器(参见 here)。但是,这仅限于符合 imblearn API 方法的采样方法。