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

时间:2019-06-25 11:24:54

标签: python-3.x pmml

从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

1 个答案:

答案 0 :(得分:0)

您可以使用sklearn2pmml.preprocessing.ExpressionTransformerternary conditional expressions转换为PMML。

例如:

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