2016-05-30 3 views
0

私は線形回帰コードを実行し、pmmlを生成しました。私のコードでは、データ型と回帰テーブルの情報があります。私は、ソースデータを変換したい、回帰ステップの前にそのpmmlに変換コードを追加することはできますか?

<?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> 
    <Application name="SAS(r)" version="9.4"/> 
    <Timestamp>2016-05-27 09:58:01</Timestamp> 
    </Header> 
    <DataDictionary numberOfFields="10"> 
     <DataField name="Invoice" optype="continuous" dataType="double"/> 
     <DataField name="ZINT_Cylinders" optype="continuous" dataType="double"/> 
     <DataField name="ZINT_EngineSize" optype="continuous" dataType="double"/> 
    </DataDictionary> 
    <TransformationDictionary/> 
    <RegressionModel functionName="regression" targetFieldName="Invoice" normalizationMethod="none"> 
     <MiningSchema> 
     <MiningField name="ZINT_Cylinders" usageType="active" optype="continuous"/> 
     <MiningField name="ZINT_EngineSize" usageType="active" optype="continuous"/> 
     </MiningSchema> 
     <Output> 
     <OutputField name="P_Invoice" displayName="Predicted: Invoice" optype="continuous" dataType="double" targetField="Invoice" feature="predictedValue"/> 
     </Output> 
     <Targets> 
     <Target field="Invoice" optype="continuous"> 
      <TargetValue defaultValue="30014.700935"/> 
     </Target> 
     </Targets> 
     <LocalTransformations/> 
     <RegressionTable intercept="-4919.70174"> 
     <NumericPredictor name="ZINT_Cylinders" coefficient="-0.007378626"/> 
     <NumericPredictor name="ZINT_EngineSize" coefficient="-0.147331595"/> 
     </RegressionTable> 
    </RegressionModel> 
    </PMML> 

のようなPMMLコードを持っています。たとえば、私はこれらをに追加したいと思う。これは可能ですか?

SELECT Invoice, 
    CASE 
     WHEN EngineSize < 2.9 THEN 20304.5142857143 
     WHEN EngineSize < 4.1 THEN 30378.8789808917 
     WHEN EngineSize >= 4.1 THEN 47119.9791666667 
     ELSE 30014.7009345794 
    END AS ZINT_EngineSize, 
    CASE 
     WHEN Cylinders < 4.5 THEN 18349.4452554745 
     WHEN Cylinders < 7 THEN 29472.3819095477 
     WHEN Cylinders >= 7 THEN 48558.847826087 
     ELSE 30014.7009345794 
    END AS ZINT_Cylinders 
FROM MYSOURCE.MYTABLE; 

答えて

1

あなたは仕事のためDiscretize transformationを使用することができます。

<DerivedField name="ZINT_EngineSize" dataType="double" optype="continuous"> 
    <Discretize field="EngineSize"> 
    <DiscretizeBin binValue="20304.5142857143"> 
     <!-- EngineSize < 2.9 --> 
     <Interval closure="openOpen" rightMargin="2.9"/> 
    </DiscretizeBin> 
    <DiscretizeBin binValue="30378.8789808917"> 
     <!-- EngineSize >= 2.9 && EngineSize < 4.1 --> 
     <Interval closure="closedOpen" leftMargin="2.9" rightMargin="4.1"/> 
    </DiscretizeBin> 
    <DiscretizeBin binValue="47119.9791666667"> 
     <!-- EngineSize >= 4.1 --> 
     <Interval closure="closedOpen" leftMargin="4.1"/> 
    </DiscretizeBin> 
    </Discretize> 
</DerivedField> 

あなたはSASスクリプトのパーサを構築し、JPMML-Model libraryを使用してDiscretize要素の生成や埋め込みを自動化することができます。

+0

私はこれにsas minerを使用しています。それはサスマイナーでこれを行うことは可能ですか? @ user1808924 – neverwinter

+1

この場合、SASサポートに連絡する必要があります。アイデアは、PMMLが、Discretize要素を使用して、このような連続的な離散値変換をサポートするということです。残りは技術的な実装の詳細です。まず最初に、 'Cylinders'から' ZINT_Cylinders'への変換を実装し、この2つの 'DerivedField'要素を手動でPMML文書に埋め込むことができます。 – user1808924

+0

ありがとう@ user1808924 – neverwinter

関連する問題