机器学习工具Weka 使用已知进行实时预测
2014-10-17 14:10
351 查看
本文使用Weka的classifyInstance和已知的机器学习模型来对数据进行实时预测
对数据进行实时预测一般有以下几个要点:
1、自己根据属性构建instance实例。
2、调用之前已经训练的模型,调用时需要将模型强制转变为模型机器学习类型,如NaiveBayes的模型需要这样操作。
Classifier m_Classifier = (NaiveBayes)SerializationHelper.read(new FileInputStream("model/bayes.model"));
以下是本文构建的Weka实时预测功能:
本实例中instance具有四个属性,第一个为double属性,第二个是double属性,第三个是Nominal类型,第四个是Class类型(预测值)。
注:本文中使用的模型可以使用Weka图形界面操作生成。
代码思路:
首先,构建一个instances结构,构建instances具有什么样的属性;其次,指定instances的类别索引,即指定哪个属性代表的是类别。之后,构建instance实例,将instances的结构框架指定为instance的数据集,给instance赋值,此处传值时不需要传入Class值,因为这是我们要预测的;最后,使用已知模型的classifyInstance方法对instance进行预测,再根据预测出的索引得到预测类别的值。
以下是编写的Weka实时预测代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.SerializationHelper;
public class WekaTestInstance
{
Instances m_Data = null;
Classifier m_Classifier = null;
public WekaTestInstance() throws FileNotFoundException, Exception
{
m_Classifier = (NaiveBayes)SerializationHelper.read(new FileInputStream("model/bayes.model"));
String nameOfDataset = "messDataset";
FastVector attributes = new FastVector();
attributes.addElement(new Attribute("aa"));
attributes.addElement(new Attribute("bb"));
FastVector fvNominalVal = new FastVector(3);
fvNominalVal.addElement("blue");
fvNominalVal.addElement("gray");
fvNominalVal.addElement("black");
attributes.addElement(new Attribute("Nominal", fvNominalVal));
FastVector classValues = new FastVector(2);
classValues.addElement("pos");
classValues.addElement("neg");
attributes.addElement(new Attribute("Class", classValues));
m_Data = new Instances(nameOfDataset, attributes, 10);
m_Data.setClassIndex(m_Data.numAttributes()-1);
}
public void classifyMessage(double aa,double bb,String nominal) throws Exception
{
Instances testset = m_Data.stringFreeStructure();
Instance instance = makeInstance(aa,bb,nominal,testset);
System.out.println(m_Data.numAttributes());
System.out.println(instance);
double predicted = m_Classifier.classifyInstance(instance);
System.out.println("predicted:"+predicted);
System.out.println("Message classified as : " +
m_Data.classAttribute().value((int)predicted));
}
private Instance makeInstance(double aa,double bb,String nominal,Instances data)
{
Instance instance = new Instance(4);
instance.setDataset(data);
Attribute aaAtt = data.attribute("aa");
Attribute bbAtt = data.attribute("bb");
Attribute nominalAtt = data.attribute("Nominal");
instance.setValue(aaAtt, aa);
instance.setValue(bbAtt, bb);
instance.setValue(nominalAtt, nominal);
// instance.setValue((Attribute)instance.attribute(0), aa);
// instance.setValue((Attribute)instance.attribute(1), bb);
// instance.setValue((Attribute)instance.attribute(2),nominal);
return instance;
}
public static void main(String[] args) throws Exception
{
WekaTestInstance wTestInstance = new WekaTestInstance();
wTestInstance.classifyMessage(5.6,9.9,"gray");
}
}
对数据进行实时预测一般有以下几个要点:
1、自己根据属性构建instance实例。
2、调用之前已经训练的模型,调用时需要将模型强制转变为模型机器学习类型,如NaiveBayes的模型需要这样操作。
Classifier m_Classifier = (NaiveBayes)SerializationHelper.read(new FileInputStream("model/bayes.model"));
以下是本文构建的Weka实时预测功能:
本实例中instance具有四个属性,第一个为double属性,第二个是double属性,第三个是Nominal类型,第四个是Class类型(预测值)。
注:本文中使用的模型可以使用Weka图形界面操作生成。
代码思路:
首先,构建一个instances结构,构建instances具有什么样的属性;其次,指定instances的类别索引,即指定哪个属性代表的是类别。之后,构建instance实例,将instances的结构框架指定为instance的数据集,给instance赋值,此处传值时不需要传入Class值,因为这是我们要预测的;最后,使用已知模型的classifyInstance方法对instance进行预测,再根据预测出的索引得到预测类别的值。
以下是编写的Weka实时预测代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.SerializationHelper;
public class WekaTestInstance
{
Instances m_Data = null;
Classifier m_Classifier = null;
public WekaTestInstance() throws FileNotFoundException, Exception
{
m_Classifier = (NaiveBayes)SerializationHelper.read(new FileInputStream("model/bayes.model"));
String nameOfDataset = "messDataset";
FastVector attributes = new FastVector();
attributes.addElement(new Attribute("aa"));
attributes.addElement(new Attribute("bb"));
FastVector fvNominalVal = new FastVector(3);
fvNominalVal.addElement("blue");
fvNominalVal.addElement("gray");
fvNominalVal.addElement("black");
attributes.addElement(new Attribute("Nominal", fvNominalVal));
FastVector classValues = new FastVector(2);
classValues.addElement("pos");
classValues.addElement("neg");
attributes.addElement(new Attribute("Class", classValues));
m_Data = new Instances(nameOfDataset, attributes, 10);
m_Data.setClassIndex(m_Data.numAttributes()-1);
}
public void classifyMessage(double aa,double bb,String nominal) throws Exception
{
Instances testset = m_Data.stringFreeStructure();
Instance instance = makeInstance(aa,bb,nominal,testset);
System.out.println(m_Data.numAttributes());
System.out.println(instance);
double predicted = m_Classifier.classifyInstance(instance);
System.out.println("predicted:"+predicted);
System.out.println("Message classified as : " +
m_Data.classAttribute().value((int)predicted));
}
private Instance makeInstance(double aa,double bb,String nominal,Instances data)
{
Instance instance = new Instance(4);
instance.setDataset(data);
Attribute aaAtt = data.attribute("aa");
Attribute bbAtt = data.attribute("bb");
Attribute nominalAtt = data.attribute("Nominal");
instance.setValue(aaAtt, aa);
instance.setValue(bbAtt, bb);
instance.setValue(nominalAtt, nominal);
// instance.setValue((Attribute)instance.attribute(0), aa);
// instance.setValue((Attribute)instance.attribute(1), bb);
// instance.setValue((Attribute)instance.attribute(2),nominal);
return instance;
}
public static void main(String[] args) throws Exception
{
WekaTestInstance wTestInstance = new WekaTestInstance();
wTestInstance.classifyMessage(5.6,9.9,"gray");
}
}
相关文章推荐
- 【深度学习】【caffe实用工具4】笔记26 windows下使用Caffe中的源代码进行【训练】和【预测】
- (转)机器学习工具WEKA使用总结,包括算法选择、参数优化、属性选择
- 【人工智能】软件使用--weka如何进行数据预测
- 机器学习中的贝叶斯方法---先验概率、似然函数、后验概率的理解及如何使用贝叶斯进行模型预测(1)
- 项目二:使用机器学习(SVM)进行基因预测
- 机器学习中的贝叶斯方法---先验概率、似然函数、后验概率的理解及如何使用贝叶斯进行模型预测(2)
- 使用Weka进行数据挖掘(Weka教程七)Weka分类/预测模型构建与评价
- weka的使用-机器学习工具
- 用VC++进行MapX二次开发::之三------使用MapX工具
- 使用数据库建模工具进行数据库建模
- 使用aspnet_regiis 工具对web.config进行加密
- 使用ORM工具进行数据访问
- 如何在Eclipse中使用Ruby开发工具(RDT)插件进行Ruby开发
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试
- 使用监测工具进行检查
- 现在就下载开源工具P/Invoke Interop Assistant -- 使用P/Invoke中进行签名转换的好帮手
- 使用ORM工具进行数据访问
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(转载)
- 如何使用 Eseutil 实用工具 (Eseutil.exe) 进行碎片整理
- StatCVS 对使用CVS的项目进行深入统计的开源工具