如何在 PMML 文件中生成 ifelse 转换器?

How to generate an ifelse transformer in a PMML file?

从 python,我想在 PMML 管道中添加一个转换 (X1, Y) -> X2,例如:

if Y < -1:
    X2 = X1
else:
    X2 = X1 

有没有 python 变压器可以做到这一点?

我想过使用 RuleSetClassifier,但它不能将变量作为输出 (https://github.com/jpmml/sklearn2pmml/issues/162)。

手动添加到 PMML 文件中:

<DerivedField name="X2" optype="continuous" dataType="double">
    <Apply function = "if">
        <Apply function="lessThan">
            <FieldRef field="Y"/>
            <Constant dataType="double">1</Constant>
        </Apply>
        <Constant dataType="integer">1</Constant>
        <FieldRef field="X1"/>
    </Apply>
</DerivedField>

它似乎有效,但我宁愿避免任何手动破解。

我的环境是:

System:
    python: 3.7.1 (default, Dec 14 2018, 19:28:38)  [GCC 7.3.0]
executable: /opt/anaconda3/envs/python_3.7.1_eb/bin/python
   machine: Linux-4.14.114-83.126.amzn1.x86_64-x86_64-with-glibc2.10

BLAS:
    macros: HAVE_CBLAS=None, NO_ATLAS_INFO=-1
  lib_dirs: /usr/lib64/atlas
cblas_libs: cblas

Python deps:
       pip: 19.1.1
setuptools: 41.0.1
   sklearn: 0.21.2
     numpy: 1.16.4
     scipy: 1.3.0
    Cython: None
    pandas: 0.24.2

您可以使用 sklearn2pmml.preprocessing.ExpressionTransformerternary conditional expressions 翻译成 PMML。

例如:

transformer = ExpressionTransformer("1 if X['Y'] < 1 else X[1]")