0

pmml に派生フィールドがあり、それらを出力フィールドとして使用したいと考えています。だから私は派生フィールドから出力フィールドを参照したい。しかし、sas アプリケーションはエラーをスローします。エラー:

エラー: 変数 Z_DD_OCCUPATION_ID が定義されていません。

派生フィールドから出力フィールドを設定するにはどうすればよいですか? これが機能しない私のpmlです

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

  <PMML version="4.2"

   xmlns="http://www.dmg.org/PMML-4_2"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <Header copyright="Copyright(c) 2002 SAS Institute Inc., Cary, NC, USA. All Rights Reserved.">

    <Application name="SAS(r)" version="9.4"/>

    <Timestamp>2016-06-23 15:36:04</Timestamp>

    </Header>

    <DataDictionary numberOfFields="26">

      <DataField name="CH_INT_FLG_CRR" optype="continuous" dataType="double"/>

      <DataField name="TD_SALE_FLG_00M_5" optype="categorical" dataType="string"/>

      <DataField name="TARGET_NUM" optype="categorical" dataType="double"/>

    </DataDictionary>

    <TransformationDictionary>

    </TransformationDictionary>

    <RegressionModel functionName="classification" targetFieldName="TARGET_NUM" normalizationMethod="logit">

      <MiningSchema>

        <MiningField name="CH_INT_FLG_CRR" usageType="active" optype="continuous"/>

        <MiningField name="TD_SALE_FLG_00M_5" usageType="active" optype="categorical"/>

        <MiningField name="TARGET_NUM" usageType="target" optype="categorical"/>

      </MiningSchema>

      <Output>

        <OutputField name="I_TARGET_NUM" displayName="Into: TARGET_NUM" optype="categorical" dataType="string" targetField="TARGET_NUM" feature="predictedValue"/>

        <OutputField name="U_TARGET_NUM" displayName="Unnormalized Into: TARGET_NUM" optype="categorical" dataType="string" targetField="TARGET_NUM" feature="predictedDisplayValue"/>

        <OutputField name="P_TARGET_NUM1" displayName="Predicted: TARGET_NUM=1" optype="continuous" dataType="double" targetField="TARGET_NUM" feature="probability" value="1"/>

        <OutputField name="P_TARGET_NUM0" displayName="Predicted: TARGET_NUM=0" optype="continuous" dataType="double" targetField="TARGET_NUM" feature="probability" value="0"/>


                <OutputField name="out_1" optype="continuous" dataType="double" feature="transformedValue">
        <FieldRef field="Z_DD_OCCUPATION_ID"/>
    </OutputField>

    <OutputField name="out_2" optype="continuous" dataType="double" feature="transformedValue">
        <FieldRef field="Z_CH_INT_FLG_CRR"/>
    </OutputField>


      </Output>

      <Targets>

        <Target field="TARGET_NUM" optype="categorical">

          <TargetValue value="1" displayValue="1" priorProbability="0.5000049143"/>

          <TargetValue value="0" displayValue="0" priorProbability="0.4999950857"/>

        </Target>

      </Targets>

      <LocalTransformations>

      <DerivedField name="Z_DD_OCCUPATION_ID" displayName="Z_DD_OCCUPATION_ID" optype="continuous" dataType="double" >
        <MapValues  outputColumn="return" defaultValue="99.9">
        <FieldColumnPair  column="condition" field="TD_SALE_FLG_00M_5"/>
        <InlineTable>
        <row>
        <condition>9999</condition>
        <return>-0.0992686543837357</return>
        </row>
        <row>
        <condition>7130</condition>
        <return>-0.010300374749499</return>
        </row>
        </InlineTable>
        </MapValues>
        </DerivedField>


        <DerivedField name="Z_CH_INT_FLG_CRR" displayName="Z_CH_INT_FLG_CRR" optype="continuous" dataType="double">

            <Discretize field="CH_INT_FLG_CRR" >

                <DiscretizeBin binValue="0.0154213834">

                    <Interval closure="openOpen" rightMargin="0"/>

                </DiscretizeBin>

                <DiscretizeBin binValue="-0.025845983">

                    <Interval closure="closedClosed" leftMargin="0" rightMargin="0"/>

                </DiscretizeBin>

                <DiscretizeBin binValue="0.0154213834">

                    <Interval closure="openOpen" leftMargin="0"/>

                </DiscretizeBin>

            </Discretize> 

        </DerivedField>

      </LocalTransformations>

      <RegressionTable intercept="0.0203226371" targetCategory="1">

        <NumericPredictor name="Z_CH_INT_FLG_CRR" coefficient="7.5086455767" />

        <NumericPredictor name="Z_DD_OCCUPATION_ID" coefficient="3.2" />


      </RegressionTable>

      <RegressionTable intercept="0" targetCategory="0"/>

    </RegressionModel>

  </PMML>

派生フィールドの代わりに datadictionary 列を使用すると、完全に機能します。

たとえば、変換した場合

    <OutputField name="out_1" optype="continuous" dataType="double" feature="transformedValue">
        <FieldRef field="Z_DD_OCCUPATION_ID"/>
    </OutputField>

    <OutputField name="out_2" optype="continuous" dataType="double" feature="transformedValue">
        <FieldRef field="Z_CH_INT_FLG_CRR"/>
    </OutputField>

<OutputField name="out_1" optype="continuous" dataType="double" feature="transformedValue">
    <FieldRef field="TD_SALE_FLG_00M_5"/>
</OutputField>

<OutputField name="out_2" optype="continuous" dataType="double" feature="transformedValue">
    <FieldRef field="CH_INT_FLG_CRR"/>
</OutputField>

できます。この場合、datadictionary 列から outputfield を参照するためです。しかし、実際には出力フィールドで派生フィールドを使用する必要があります。派生フィールドから出力フィールドを参照するにはどうすればよいですか?

4

1 に答える 1

1

LocalTransformations派生フィールドを(つまり、ローカル スコープ) からTransformationDictionary(つまり、グローバル スコープ)に移動する必要があります。

PMML 4.2 では、出力フィールドからローカル派生フィールドを参照することは許可されていません。その「論理」は、PMML パーサーによって参照される前にフィールドを参照できないということです。あなたの例では、OutputField@name=out_1要素は要素の前に発生しDerivedField@name=Z_DD_OCCUPATION_IDます。

PMML 4.3 では、この規則が緩和されました。詳細については、 http://mantis.dmg.org/view.php?id=142を参照してください。

于 2016-08-25T19:55:43.523 に答える