如何将Java制造的Weka模型导出为PMML格式

时间:2019-04-10 21:50:45

标签: java linear-regression weka pmml

有没有一种方法可以将LinearRegression模型(基于某些数据集)导出为Java中的PMML格式?

到目前为止的代码

    DataSource source = new DataSource("house.arff");

    Instances dataset = source.getDataSet();

    Instances m_structure = new Instances(dataset, 0);

    m_structure.setClassIndex(dataset.numAttributes()-1);
    dataset.setClassIndex(dataset.numAttributes()-1);


    LinearRegression lReg = new LinearRegression();


    int m_NumClasses = dataset.numClasses();

    int class_index= dataset.classIndex();


    int nK = m_NumClasses - 1;
    int nR =  dataset.numAttributes() - 1;
    double[][] m_Par = new double[nR + 1][nK];
    String pmmlx= LogisticProducerHelper.toPMML(dataset,m_structure,m_Par,m_NumClasses);
    System.out.println(pmmlx);

这将产生以下PMML文件

   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PMML version="4.1" xmlns="http://www.dmg.org/PMML-4_1">
    <Header copyright="WEKA">
        <Application name="WEKA" version="3.8.0"/>
    </Header>
    <DataDictionary>
        <DataField name="houseSize" optype="continuous"/>
        <DataField name="lotSize" optype="continuous"/>
        <DataField name="bedrooms" optype="continuous"/>
        <DataField name="granite" optype="continuous"/>
        <DataField name="bathroom" optype="continuous"/>
        <DataField name="sellingPrice" optype="continuous"/>
    </DataDictionary>
    <RegressionModel algorithmName="logisticRegression" functionName="classification" modelType="logisticRegression" normalizationMethod="softmax">
        <MiningSchema>
            <MiningField missingValueReplacement="3132.0" missingValueTreatment="asMean" name="houseSize" usageType="active"/>
            <MiningField missingValueReplacement="11788.142857142857" missingValueTreatment="asMean" name="lotSize" usageType="active"/>
            <MiningField missingValueReplacement="5.0" missingValueTreatment="asMean" name="bedrooms" usageType="active"/>
            <MiningField missingValueReplacement="0.42857142857142855" missingValueTreatment="asMean" name="granite" usageType="active"/>
            <MiningField missingValueReplacement="0.7142857142857143" missingValueTreatment="asMean" name="bathroom" usageType="active"/>
            <MiningField name="sellingPrice" usageType="predicted"/>
        </MiningSchema>
        <Output/>
    </RegressionModel>
</PMML>

上面的PMML文件不能用于预测实例,因为尚未建立模型。

使用以下行构建分类器。

lReg.buildClassifier(dataset);

所以我想知道是否有一种方法可以将该分类器学习到的参数添加到PMML文件中,以便可以将其作为已受过训练的分类器轻松导出/导入?

1 个答案:

答案 0 :(得分:0)

根据LogisticProducerHelper的JavaDoc:

  

Helper类,用于为Logistic分类器生成PMML。不能直接使用-您应该在经过训练的Logistic分类器上调用toPMML()。

JavaDoc指出,只有Logistic个分类器实现了PMMLProducer

如果您使用Logistic,则可以使用logistic.toPMML(train)方法。