有没有办法可以将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文件中,以便可以作为已经训练过的分类器轻松导出/导入?
根据LogisticProducerHelper的JavaDoc:
Helper类,用于为Logistic分类器生成PMML。不是为直接使用而设计的 - 您应该在训练有素的Logistic分类器上调用PMML()。
JavaDoc声明只有Logistic分类器实现PMMLProducer。
如果您使用Logistic,您可以使用logistic.toPMML(train)
方法。