2

私は PMML モデルのコンシューマとして Augustus を使用しています。次のように、2 つの数値を加算する例を変更して、DefineFunction 要素を含めました。

<PMML version="4.1" xmlns="http://www.dmg.org/PMML-4_1">
    <Header/>
    <DataDictionary>
        <DataField name="x" dataType="double" optype="continuous"/>
        <DataField name="y" dataType="double" optype="continuous"/>
    </DataDictionary>
    <TransformationDictionary>
        <DefineFunction dataType="float" optype="continuous" name="add">
            <ParameterField optype="continuous" name="first"></ParameterField>
            <ParameterField optype="continuous" name="second"></ParameterField>
                <Apply function="+" invalidValueTreatment="returnInvalid">
                    <FieldRef field="first"></FieldRef>
                    <FieldRef field="second"></FieldRef>
                </Apply>
        </DefineFunction>
        <DerivedField name="z" dataType="double" optype="continuous">
            <Apply function="add">
                <FieldRef field="x"/>
                <FieldRef field="y"/>
            </Apply>
        </DerivedField>
    </TransformationDictionary>
</PMML>

このモデルをファイルに保存し、次のように実行してみます。

from resources import add_two_numbers_file # this is just the path to my model file
from augustus.strict import modelLoader

# Load model
with open(add_two_numbers_file, 'r') as model_file:
    model_str = model_file.read()
    model = modelLoader.loadXml(model_str)

# Run model
print model.calc({'x':[1,2,3],'y':[4,5,6]}).look()

ただし、エラーが発生します。

AttributeError: 'DefineFunction' object has no attribute '_setupCalculate'

私は最新のトランク (リビジョン 794) を使用しており、変更されていないサンプル (DefineFunction なし) を問題なく実行できます。Augustus は DefineFunction をサポートしていますか?

4

2 に答える 2

2

jcrudy さん、その通りです。これはバグでした。(API が変更され、DefineFunction は最新のものではありませんでした。) これは現在、パブリック SVN リポジトリで修正されています。Augustus >= r795 を使用すると、当初の意図どおりに例を実行できます。

ところで、PMML は外部ファイルから取得されますが、それを文字列にロードしてから PMML DOM にロードします。loadXMLファイル名を渡すだけで、中間ステップをスキップできます。

model = modelLoader.loadXml(add_two_numbers_file)

(これは、非常に大きな PMML ファイルに関連する可能性があります。また、GZip できることにも注意してください。)

于 2014-01-14T18:07:03.547 に答える