如何通过/跳过管道取决于特定条件

Posted

技术标签:

【中文标题】如何通过/跳过管道取决于特定条件【英文标题】:How to passthrough / skip pipeline depend on certain condition 【发布时间】:2020-01-10 07:52:42 【问题描述】:

我有以下用于一些数据预处理的 scikit 学习管道。

如果数据框中有分类特征,我想提取特征并通过 SimpleImputer 运行;如果没有这样的功能(即 dataframe['categoricals'] 不存在),我希望它只是“跳过”/通过管道并继续下一步。

如何做到这一点?

Pipeline ([
('extract', extract_feature(dataframe['categoricals]),
('fill', SimpleImputer(strategy='constant', fill_value='dummy')

])

【问题讨论】:

如果没有直接的方法可以跳过这一步,有没有办法构建一个“包装器”来传递 otpion(启用/禁用下一个管道)作为一些全局变量? 这能回答你的问题吗? Is it possible to toggle a certain step in sklearn pipeline? 【参考方案1】:

    在转换器周围实现一个包装器,给它一个参数,例如,if_skip,并打开/关闭这个参数来启用/禁用这个转换器。当然,您可以将 if_skip 设置为实例变量,例如 self.if_skip,并根据需要从上一个管道步骤中分配值

    SkipSimpleImputer(if_skip=False,strategy='constant', fill_value='dummy')
    
    class SkipSimpleImputer(SimpleImputer):
    def __init__(if_skip=False, strategy='constant', fill_value='dummy')
        pass
    

    用 if else :( 包裹它,不是很好的解决方案,但至少它是一个解决方案,

【讨论】:

谢谢,是的,如果其他方法可行,但非常讨厌的解决方案。包装器似乎是一种干净的方法,我会尝试一下。

以上是关于如何通过/跳过管道取决于特定条件的主要内容,如果未能解决你的问题,请参考以下文章

通过覆盖“检测到 CI,跳过 Git 挂钩安装”在 Jenkins 管道作业中安装 husky git 挂钩

当我遇到特定的“if”条件时,如何跳过一轮“for循环”并继续下一轮?

如何通过管道传输到文件(NodeJS)

python通过管道进行进程通信:竞争条件

将所有请求通过管道传输到特定端口 - 节点 js 应用程序

尝试使用特定用户通过 ssh 登录时出现“写入失败:管道损坏”