PMML- MultipleModels: дополнительная цель с информацией о пропущенных / недопустимых значениях - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу добавить дополнительную цель ("outputState") в мою модель PMML-регрессии.

  • outputState = 0: нет отсутствующих / недопустимых входных значений (-> нет импутации в регрессионной модели)
  • outputState = 1: отсутствуют / недопустимые недопустимые значения (-> импутация в регрессионной модели)

Я пытался работать с несколькими моделями, но я не знаю, как правильно обрабатывать несколько моделей / целей / выходов.

Пример (пояснение ниже):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <PMML xmlns="http://www.dmg.org/PMML-4_3" xmlns:data="http://jpmml.org/jpmml-model/InlineTable" version="4.3"><Header><Application name="JPMML-R" version="1.3.14"/><Timestamp>2020-01-07T15:56:07Z</Timestamp></Header>
    <DataDictionary>
      <DataField name="outputState" optype="categorical" dataType="integer"/>
      <DataField name="outputResult" optype="continuous" dataType="double"/>
      <DataField name="inputA" optype="continuous" dataType="double">
        <Interval closure="closedClosed" leftMargin="-1" rightMargin="1"/>
        <Value property="missing" value="NA"/>
      </DataField>
      <DataField name="inputB" optype="continuous" dataType="double">
        <Interval closure="closedClosed" leftMargin="-1" rightMargin="1"/>
        <Value property="missing" value="NA"/>
      </DataField>
      <DataField name="inputC" optype="continuous" dataType="double">
        <Interval closure="closedClosed" leftMargin="-1" rightMargin="1"/>
        <Value property="missing" value="NA"/>
      </DataField>
    </DataDictionary>
    <TransformationDictionary/>
    <MiningModel functionName="mixed">
      <MiningSchema>
      <MiningField name="outputState" usageType="target"/>
      <MiningField name="outputResult" usageType="target"/>
      <MiningField name="inputA"/>
      <MiningField name="inputB"/>
      <MiningField name="inputC"/>
    </MiningSchema>
    <Output>
      <OutputField name="outputState" optype="categorical" dataType="integer" targetField="outputState"/>
      <OutputField name="outputResult" optype="continuous" dataType="double" targetField="outputResult"/>
    </Output>
    <Segmentation multipleModelMethod="selectAll">
      <Segment id="1">
        <True/>
        <TreeModel modelName="TEST" functionName="classification" noTrueChildStrategy="returnLastPrediction">
          <MiningSchema>
            <MiningField name="outputState" usageType="target"/>
            <MiningField name="inputA" invalidValueTreatment="asMissing"/>
            <MiningField name="inputB" invalidValueTreatment="asMissing"/>
            <MiningField name="inputC" invalidValueTreatment="asMissing"/>
          </MiningSchema>
          <Node score="0">
          <True/>
            <Node score="1">    
              <CompoundPredicate booleanOperator="or">
              <SimplePredicate field="inputA" operator="isMissing"/>
              <SimplePredicate field="inputB" operator="isMissing"/>
              <SimplePredicate field="inputC" operator="isMissing"/>
              </CompoundPredicate>
            </Node> 
          </Node>
        </TreeModel>
      </Segment>
      <Segment id="2">
        <True/>
        <RegressionModel functionName="regression">
          <MiningSchema>
            <MiningField name="outputResult" usageType="target"/>
            <MiningField name="inputA" missingValueReplacement="0" missingValueTreatment="asMean" invalidValueTreatment="asMissing"/>
            <MiningField name="inputB" missingValueReplacement="0" missingValueTreatment="asMean" invalidValueTreatment="asMissing"/>
            <MiningField name="inputC" missingValueReplacement="0" missingValueTreatment="asMean" invalidValueTreatment="asMissing"/>
          </MiningSchema>
          <RegressionTable intercept="2">
            <NumericPredictor name="inputA" coefficient="1"/>
            <NumericPredictor name="inputB" coefficient="2"/>
            <NumericPredictor name="inputC" coefficient="3"/>
          </RegressionTable>
        </RegressionModel>
      </Segment>
    </Segmentation>
    </MiningModel>
    </PMML>

Объяснение:

  1. DataDictonary (с левым и правым полями)
  2. MiningModel (functionName = "mixed", похоже, неправильно ?; Сегментация множественныеModelMethod = "selectAll "неправильно тоже?):
    • определение вывода (кажется, тоже неправильно? из-за разных целей?)
    • простая модель дерева классификации (для обнаружения пропущенных / вмененных значений) -> target: outputState
    • простая модель регрессии -> цель: outputResult

У кого-нибудь есть идея или лучшие предложения?

...