PMMLlib::PMMLlib p; // Set Header node p.SetHeader("copyright", "description", "name", "version", "annotation"); // Set DataDictionnary node and its DataField nodes int nInput = 8; vector<string>vfieldNameI(nInput); vfieldNameI[0] = "rw"; vfieldNameI[1] = "r"; vfieldNameI[2] = "tu"; vfieldNameI[3] = "tl"; vfieldNameI[4] = "hu"; vfieldNameI[5] = "hl"; vfieldNameI[6] = "l"; VfieldNameI[7] = "kw"; string fieldNameO("yhat"); string opType = "continuous"; string dataType = "float"; for(int j=0 ; j<nInput; j++) { p.AddDataField(vfieldNameI[j], vfieldNameI[j], opType, dataType, "ClosedClosed", 0., 0.); } p.AddDataField(fieldNameO, fieldNameO, opType, dataType, "ClosedClosed", 0., 0.); // Add a model of type NeuralNetwork string modelName("sANNName"); p.AddNeuralNetwork(modelName, PMMLlib::kREGRESSION); // Set MiningSchema for(int j=0 ; j<nInput ; j++) { p.AddMiningSchema(vfieldNameI[j], "active"); } p.AddMiningSchema(fieldNameO, "predicted"); // Set NeuralInput double orig1=0; vector<double>vnorm1(nInput); vnorm1[0] = -2.889932e-01; vnorm1[1] = -5.756638e-01; vnorm1[2] = -1.699313e-01; vnorm1[3] = -1.707007e-01; vnorm1[4] = -3.302777e-02; vnorm1[5] = -4.562070e-02; vnorm1[6] = -1.155882e-01; vnorm1[7] = -5.780019e-02; vector<double>vorig2(nInput); vorig2[0] = 9.999901e-02; vorig2[1] = 2.504894e+04; vorig2[2] = 8.933486e+04; vorig2[3] = 8.955232e+01; vorig2[4] = 1.050003e+03; vorig2[5] = 7.600007e+02; vorig2[6] = 1.400018e+03; vorig2[7] = 1.095001e+04; double norm2=0; for(int j=0 ; j<nInput ; j++) { p.AddNeuralInput(j, fieldName[j], opType, dataType, vorig1, vnorm1[j], vorig2[j], vnorm2); } // Add first NeuralLayer and its neuron p.AddNeuralLayer(PMMLlib::kTANH); int idN1 = 8; double bias1 = -1.263572; int conNb1 = nWeights1; int from1 = 0; int nWeights1 = 8; vector<double>weights1(nWeights1); weights1[0] = 7.536629e-01; weights1[1] = 1.653660e-03; weights1[2] = 4.725001e-03; weights1[3] = 9.969786e-03; weights1[4] = 1.787976e-01; weights1[5] = -1.809809e-01; weights1[6] = -1.735688e-01; weights1[7] = 8.559675e-02; p.AddNeuron(idN1, bias1, conNb1, from1, weights1); // Add second NeuralLayer and its neuron p.AddNeuralLayer(PMMLlib::kIDENTITY); int idN2 = 9; double bias2 = -1.745483; int conNb2 = nWeights2; int from2 = 8; int nWeights2 = 1; vector<double>weights2(nWeights2); weights2[0] = 6.965512e+00; p.AddNeuron(idN2, bias2, conNb2, from2, weights2); // Set NeuralOutput int idO = 9; double dorig1 = 0; double dnorm1 = -5.873935e-01; double dorig2 = 7.781171e+01 ; double dnorm2 = 0; p.AddNeuralOutput(idO, fieldNameO, opType, dataType, dorig1, dnorm1, dorig2, dnorm2); // Generate the PMML file string pmmlFilename = "myPmmlFile.pmml"; p.Write( pmmlFilename );
The matching PMML file is:
<?xml version="1.0"?> <PMML xmlns="http://www.dmg.org/PMML-4_1" version="version"> <Header copyright="copyright" description="description"> <Application name="PMMLlib" version="myVersion"/> <Annotation>Tests unitaires PMMLlib</Annotation> </Header> <DataDictionary> <DataField name="rw" displayName="rw" optype="continuous" dataType="float"/> <DataField name="r" displayName="r" optype="continuous" dataType="float"/> <DataField name="tu" displayName="tu" optype="continuous" dataType="float"/> <DataField name="tl" displayName="tl" optype="continuous" dataType="float"/> <DataField name="hu" displayName="hu" optype="continuous" dataType="float"/> <DataField name="hl" displayName="hl" optype="continuous" dataType="float"/> <DataField name="l" displayName="l" optype="continuous" dataType="float"/> <DataField name="kw" displayName="kw" optype="continuous" dataType="float"/> <DataField name="yhat" displayName="yhat" optype="continuous" dataType="float"/> </DataDictionary> <NeuralNetwork modelName="sANNName" functionName="regression" numberOfLayers="2"> <MiningSchema> <MiningField name="rw" usageType="active"/> <MiningField name="r" usageType="active"/> <MiningField name="tu" usageType="active"/> <MiningField name="tl" usageType="active"/> <MiningField name="hu" usageType="active"/> <MiningField name="hl" usageType="active"/> <MiningField name="l" usageType="active"/> <MiningField name="kw" usageType="active"/> <MiningField name="yhat" usageType="predicted"/> </MiningSchema> <NeuralInputs numberOfInputs="8"> <NeuralInput id="0"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="rw"> <LinearNorm orig="0.000000e+00" norm="-2.889932e-01"/> <LinearNorm orig="9.999901e-02" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="1"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="r"> <LinearNorm orig="0.000000e+00" norm="-5.756638e-01"/> <LinearNorm orig="2.504894e+04" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="2"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="tu"> <LinearNorm orig="0.000000e+00" norm="-1.699313e-01"/> <LinearNorm orig="8.933486e+04" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="3"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="tl"> <LinearNorm orig="0.000000e+00" norm="-1.707007e-01"/> <LinearNorm orig="8.955232e+01" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="4"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="hu"> <LinearNorm orig="0.000000e+00" norm="-3.302777e-02"/> <LinearNorm orig="1.050003e+03" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="5"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="hl"> <LinearNorm orig="0.000000e+00" norm="-4.562070e-02"/> <LinearNorm orig="7.600007e+02" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="6"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="l"> <LinearNorm orig="0.000000e+00" norm="-1.155882e-01"/> <LinearNorm orig="1.400018e+03" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="7"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="kw"> <LinearNorm orig="0.000000e+00" norm="-5.780019e-02"/> <LinearNorm orig="1.095001e+04" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralInput> </NeuralInputs> <NeuralLayer activationFunction="tanh" numberOfNeurons="1"> <Neuron id="8" bias="-1.263572e+00"> <Con from="0" weight="7.536629e-01"/> <Con from="1" weight="1.653660e-03"/> <Con from="2" weight="4.725001e-03"/> <Con from="3" weight="9.969786e-03"/> <Con from="4" weight="1.787976e-01"/> <Con from="5" weight="-1.809809e-01"/> <Con from="6" weight="-1.735688e-01"/> <Con from="7" weight="8.559675e-02"/> </Neuron> </NeuralLayer> <NeuralLayer activationFunction="identity" numberOfNeurons="1"> <Neuron id="9" bias="-1.745483e+00"> <Con from="8" weight="6.965512e+00"/> </Neuron> </DataDictionary> </NeuralLayer> <NeuralOutputs numberOfOutputs="1"> <NeuralOutput outputNeuron="9"> <DerivedField optype="continuous" dataType="float"> <NormContinuous field="yhat"> <LinearNorm orig="0.000000e+00" norm="-5.873935e-01"/> <LinearNorm orig="7.781171e+01" norm="0.000000e+00"/> </NormContinuous> </DerivedField> </NeuralOutput> </NeuralOutputs> </NeuralNetwork> </PMML>
PMMLlib::PMMLlib p; // Header node p.SetHeader("copyright", "description", "name", "version", "annotation"); // DataDictionnary node and its DataField nodes int nData = 3; vector<string>fieldName(nData); fieldName[0] = "x6"; fieldName[1] = "x8"; fieldName[2] = "x1"; vector<string>displayName(nData); displayName[0] = " x_{6}"; displayName[1] = " x_{8}"; displayName[2] = " x_{1}"; vector<double>leftMargin(nData); leftMargin[0] = 1.1e+01; leftMargin[1] = 2.81e+01; leftMargin[2] = 6.36e+00; vector<double>rightMargin(nData); rightMargin[0] = 2.3e+01; rightMargin[1] = 7.67e+01; rightMargin[2] = 1.251e+01; for(int j=0; j<nData; j++) { p.AddDataField( fieldName[j], displayName[j], "continuous", "double", "ClosedClosed", leftMargin[j], rightMargin[j], true); } // Add a model of type RegressionModel string modelName("sREGName"); p.AddRegressionModel(modelName, PMMLlib::kREGRESSION, fieldName[2]); // Set MiningSchema for(int j=0 ; j<nData-1 ; j++) { p.AddMiningSchema(fieldName[j], "active"); } p.AddMiningSchema(fieldName[nData-1], "predicted"); // Set Regression table double intercept = 3.837365; p.AddRegressionTable(intercept); // Set NumericPredictor nodes vector<double>numPredCoeff(nData-1); numPredCoeff[0] = 0.4759134; numPredCoeff[1] = 0.1428838; for(int j=0; j<nData-1; j++) { p.AddNumericPredictor(fieldName[j], 1, numPredCoeff[j]); } // Set PredictorTerm nodes vector<double>predTermCoeff(nData-1); predTermCoeff[0] = -0.02201903; predTermCoeff[1] = 0.000536256; vector< vector<string> > fieldRefVect(nData-1); vector<string>fieldRef0(2); fieldRef0[0] = fieldName[0]; fieldRef0[1] = fieldName[1]; vector<string>fieldRef1(3); fieldRef1[0] = fieldName[0]; fieldRef1[1] = fieldName[0]; fieldRef1[2] = fieldName[1]; fieldRefVect[0] = fieldRef0; fieldRefVect[nData-2] = fieldRef1; for(int j=0; j<nData-1; j++) { p.AddPredictorTerm(predTermCoeff[j], fieldRefVect[j]); } // Generate the PMML file string pmmlFilename = "myPmmlFile.pmml"; p.Write( pmmlFilename );
The matching PMML file is:
<?xml version="1.0"?> <PMML xmlns="http://www.dmg.org/PMML-4_1" version="version"> <Header copyright="copyright" description="description"> <Application name="PMMLlib" version="myVersion"/> <Annotation>Tests unitaires PMMLlib</Annotation> </Header> <DataDictionary> <DataField name="x6" displayName=" x_{6}" optype="continuous" dataType="double"> <Interval closure="ClosedClosed" leftMargin="1.100000e+01" rightMargin="2.300000e+01"/> </DataField> <DataField name="x8" displayName=" x_{8}" optype="continuous" dataType="double"> <Interval closure="ClosedClosed" leftMargin="2.810000e+01" rightMargin="7.670000e+01"/> </DataField> <DataField name="x1" displayName=" x_{1}" optype="continuous" dataType="double"> <Interval closure="ClosedClosed" leftMargin="6.360000e+00" rightMargin="1.251000e+01"/> </DataField> </DataDictionary> <RegressionModel functionName="regression" modelName="Modeler[LinearRegression]Tds[steamplant]Predictor[x6:x8:x6x8:x6x6x8]Target[x1]" targetFieldName="x1"> <MiningSchema> <MiningField name="x6" usageType="active"/> <MiningField name="x8" usageType="active"/> <MiningField name="x1" usageType="predicted"/> </MiningSchema> <RegressionTable intercept="3.837365e+00"> <NumericPredictor name="x6" exponent="1" coefficient="4.759134e-01"/> <NumericPredictor name="x8" exponent="1" coefficient="1.428838e-01"/> <PredictorTerm coefficient="-2.201903e-02"> <FieldRef field="x6"/> <FieldRef field="x8"/> </PredictorTerm> <PredictorTerm coefficient="5.362560e-04"> <FieldRef field="x6"/> <FieldRef field="x6"/> <FieldRef field="x8"/> </PredictorTerm> </RegressionTable> </RegressionModel> </PMML>