Weka生成和加载PMML文件
2016-07-13 19:22
441 查看
网络上太多示例展示了Weka怎么样调用数据分类算法,但想想我如何针对一个训练好的分类模型进行重用呢。所以必须要“导出来”。导出模型,一个标准的方式就是用PMML了。
标准的方式,Weka一定会支持。找了一下,不负所望。将上一次的代码整理了一下,加上PMML的支持:
训练模型,导出PMML文件
加载PMML文件
验证模型
main函数
其实还有另外一种,就是通过Java序列化类实例的方式保存模型。
参考文章:使用Weka进行数据挖掘(Weka教程九)模型序列化/持久化存储和加载
核心就是:
标准的方式,Weka一定会支持。找了一下,不负所望。将上一次的代码整理了一下,加上PMML的支持:
训练模型,导出PMML文件
static void trainModelToPmml(String arffFile, int classIndex, File pmmlFile) throws Exception { File inputFile = new File(arffFile); //训练文件 ArffLoader loader = new ArffLoader(); loader.setFile(inputFile); Instances insTrain = loader.getDataSet(); // 读入训练文件 insTrain.setClassIndex(classIndex); Logistic logic=new Logistic(); logic.buildClassifier(insTrain);//根据训练数据构造分类器 String pmml = logic.toPMML(insTrain); PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(pmmlFile))); writer.println(pmml); writer.close(); }
加载PMML文件
static PMMLClassifier getClassifier(String filePath) { PMMLClassifier regression = null; try { PMMLModel model = PMMLFactory .getPMMLModel(new BufferedInputStream( new FileInputStream(new File(filePath)))); regression = (PMMLClassifier) model; } catch (Exception ex) { ex.printStackTrace(); } return regression; }
验证模型
static void verifyModel(PMMLClassifier logic, String arffFile, int classIndex) throws Exception { ArffLoader loader = new ArffLoader(); File inputFile = new File(arffFile);//测试数据 loader.setFile(inputFile); Instances insTest =loader.getDataSet(); // 读入测试文件 insTest.setClassIndex(classIndex); //设置分类属性所在行号(第一行为0号),instancesTest.numAttributes()可以取得属性总数 double sum = insTest.numInstances();//测试实例数 double right=0.0f; for(int i=0;i<sum;i++){ Instance ins = insTest.instance(i); double a = logic.classifyInstance(ins); double b = ins.classValue(); if(java.lang.Math.abs(logic.classifyInstance(ins)-ins.classValue()) < 0.0001) { right++;//正确值加一 } } System.out.println("classification precision:" + (right/sum)); }
main函数
public static void main(String[] args) throws Exception { final String arffTrainData = "data/LogisticRegressionFakeDataTrain.arff"; final String arffData = "data/LogisticRegressionFakeData.arff"; final String pmmlFile = "data/LogisticRegression.pmml"; trainModelToPmml(arffTrainData, 6, new File(pmmlFile)); PMMLClassifier classifier = getClassifier(pmmlFile); verifyModel(classifier, arffData, 6); }
其实还有另外一种,就是通过Java序列化类实例的方式保存模型。
参考文章:使用Weka进行数据挖掘(Weka教程九)模型序列化/持久化存储和加载
核心就是:
// 序列化保存 public static void persistModel(J48 model, String ModelPath) { ObjectOutputStream oos = null; try { oos = new ObjectOutputStream( new FileOutputStream(ModelPath)); oos.writeObject(model); oos.flush(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } // 反序列化,加载 public static J48 reloadPersistModel(String ModelPath) { ObjectInputStream ois = null; try { ois = new ObjectInputStream( new FileInputStream(new File(ModelPath))); J48 model = (J48) ois.readObject(); return model; } catch (Exception e) { e.printStackTrace(); } return null; }
相关文章推荐
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 详解BI/数据分析/数据挖掘/业务分析概念 7fe0
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 普通最小二乘法的推导证明
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用2
- 数据挖掘项目的特征和关键环节
- 聚类算法总结
- 一位数据挖掘成功人士给数据挖掘在读研究生的建议
- 数据挖掘网上资料大全
- 数据挖掘技术与用户知识获取
- Data mining 数据挖掘
- weka中的数据预处理
- 数据挖掘分类算法的评价指标
- 数据挖掘
- 大数据,且行且思( 文/ 占超群)
- 转载 以LibSvm为例给出weka输出结果的简单翻译 [WEKA使用]
- HUNTER
- kmeans python版
- 数据挖掘-聚类-K-means算法Java实现
- 数据挖掘书籍