java调用Weka中神经网络的算法(从数据库中取数据)
2017-03-07 12:59
471 查看
http://blog.csdn.net/shuijingyezihehe/article/details/38331005
本文中使用的weka版本为3.6版本,参阅的API也是3.6的
相关的包(weka.jar,weka-src.jar,libsvm.jar.wlsvm.jar)可以在以下链接下载:
http://pan.baidu.com/s/1kTHW3un
在Eclipse项目中导入weka包,本文中使用BP神经网络的算法,只用添加weka.jar即可,若要使用libsvm的算法,还需要添加libsvm.jar包
源代码如下:
[java] view
plain copy
import java.io.File;
import java.io.IOException;
import weka.classifiers.functions.MultilayerPerceptron;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader;
[java] view
plain copy
public class Test2 {
public static void main(String[] args) throws IOException {
//便于测试,用数组保存一些数据,从数据库中取数据是同理的
//二维数组第一列表示当月的实际数据,第二列是上个月的数据,用于辅助对当月数据的预测的
//二维数组的数据用于测试集数据,为了展示两种weka载入数据的方法,将训练集数据从arff文件中读取
double[][] a = {{-0.93,-0.995},{-0.93,-0.93},{-0.93,-0.93},{-0.95,-0.93},{-0.93,-0.95},
{-0.95,-0.93},{-0.93,-0.95},{-0.93,-0.93},{-0.95,-0.93},{-0.9,-0.95},
{-0.92,-0.9},{-0.575,-0.92},{-0.23,-0.575}};
//读入训练集数据
File inputFile = new File("G:\\weka3.6\\Weka-3-6\\data\\train.arff");//该文件见源代码最后的分享链接,可以下载后将路径替换掉
ArffLoader atf = new ArffLoader();
try {
atf.setFile(inputFile);
} catch (IOException e1) {
e1.printStackTrace();
}
Instances instancesTrain = atf.getDataSet();
instancesTrain.setClassIndex(0);//设置训练数据集的类属性,即对哪个数据列进行预测(属性的下标从0开始)
//读入测试集数据
FastVector attrs = new FastVector();
Attribute ratio = new Attribute("CUR",1);//创建属性,参数为属性名称和属性号,但属性号并不影响FastVector中属性的顺序
Attribute preratio = new Attribute("PRE",2);
attrs.addElement(ratio);//向FastVector中添加属性,属性在FastVector中的顺序由添加的先后顺序确定。
attrs.addElement(preratio);
Instances instancesTest = new Instances("bp",attrs,attrs.size());//创建实例集,即数据集,参数为名称,FastVector类型的属性集,以及属性集的大小(即数据集的列数)
instancesTest.setClass(ratio);//设置数据集的类属性,即对哪个数据列进行预测
for(int k=0;k<13;k++){
Instance ins = new Instance(attrs.size());//创建实例,即一条数据
ins.setDataset(instancesTest);//设置该条数据对应的数据集,和数据集的属性进行对应
ins.setValue(ratio, a[k][0]);//设置数据每个属性的值
ins.setValue(preratio, a[k][1]);
instancesTest.add(ins);//将该条数据添加到数据集中
}
MultilayerPerceptron m_classifier = new MultilayerPerceptron();//创建算法实例,要使用其他的算法,只用把类换做相应的即可
try {
m_classifier.buildClassifier(instancesTrain); //进行训练
} catch (Exception e) {
e.printStackTrace();
}
for(int i = 0;i<13;i++){//测试分类结果
//instancesTest.instance(i)获得的是用模型预测的结果值,instancesTest.instance(i).classValue()获得的是测试集类属性的值
//此处是把预测值和实际值同时输出,进行对比
try {
System.out.println(m_classifier.classifyInstance(instancesTest.instance(i))+",,,"+instancesTest.instance(i).classValue());
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("bp success!");
}
}
train.arff
本文中使用的weka版本为3.6版本,参阅的API也是3.6的
相关的包(weka.jar,weka-src.jar,libsvm.jar.wlsvm.jar)可以在以下链接下载:
http://pan.baidu.com/s/1kTHW3un
在Eclipse项目中导入weka包,本文中使用BP神经网络的算法,只用添加weka.jar即可,若要使用libsvm的算法,还需要添加libsvm.jar包
源代码如下:
[java] view
plain copy
import java.io.File;
import java.io.IOException;
import weka.classifiers.functions.MultilayerPerceptron;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader;
[java] view
plain copy
public class Test2 {
public static void main(String[] args) throws IOException {
//便于测试,用数组保存一些数据,从数据库中取数据是同理的
//二维数组第一列表示当月的实际数据,第二列是上个月的数据,用于辅助对当月数据的预测的
//二维数组的数据用于测试集数据,为了展示两种weka载入数据的方法,将训练集数据从arff文件中读取
double[][] a = {{-0.93,-0.995},{-0.93,-0.93},{-0.93,-0.93},{-0.95,-0.93},{-0.93,-0.95},
{-0.95,-0.93},{-0.93,-0.95},{-0.93,-0.93},{-0.95,-0.93},{-0.9,-0.95},
{-0.92,-0.9},{-0.575,-0.92},{-0.23,-0.575}};
//读入训练集数据
File inputFile = new File("G:\\weka3.6\\Weka-3-6\\data\\train.arff");//该文件见源代码最后的分享链接,可以下载后将路径替换掉
ArffLoader atf = new ArffLoader();
try {
atf.setFile(inputFile);
} catch (IOException e1) {
e1.printStackTrace();
}
Instances instancesTrain = atf.getDataSet();
instancesTrain.setClassIndex(0);//设置训练数据集的类属性,即对哪个数据列进行预测(属性的下标从0开始)
//读入测试集数据
FastVector attrs = new FastVector();
Attribute ratio = new Attribute("CUR",1);//创建属性,参数为属性名称和属性号,但属性号并不影响FastVector中属性的顺序
Attribute preratio = new Attribute("PRE",2);
attrs.addElement(ratio);//向FastVector中添加属性,属性在FastVector中的顺序由添加的先后顺序确定。
attrs.addElement(preratio);
Instances instancesTest = new Instances("bp",attrs,attrs.size());//创建实例集,即数据集,参数为名称,FastVector类型的属性集,以及属性集的大小(即数据集的列数)
instancesTest.setClass(ratio);//设置数据集的类属性,即对哪个数据列进行预测
for(int k=0;k<13;k++){
Instance ins = new Instance(attrs.size());//创建实例,即一条数据
ins.setDataset(instancesTest);//设置该条数据对应的数据集,和数据集的属性进行对应
ins.setValue(ratio, a[k][0]);//设置数据每个属性的值
ins.setValue(preratio, a[k][1]);
instancesTest.add(ins);//将该条数据添加到数据集中
}
MultilayerPerceptron m_classifier = new MultilayerPerceptron();//创建算法实例,要使用其他的算法,只用把类换做相应的即可
try {
m_classifier.buildClassifier(instancesTrain); //进行训练
} catch (Exception e) {
e.printStackTrace();
}
for(int i = 0;i<13;i++){//测试分类结果
//instancesTest.instance(i)获得的是用模型预测的结果值,instancesTest.instance(i).classValue()获得的是测试集类属性的值
//此处是把预测值和实际值同时输出,进行对比
try {
System.out.println(m_classifier.classifyInstance(instancesTest.instance(i))+",,,"+instancesTest.instance(i).classValue());
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("bp success!");
}
}
train.arff
相关文章推荐
- java调用Weka中神经网络的算法(从数据库中取数据)
- (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法)
- (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法原理篇)
- 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法原理篇)
- Java调用BCP导入数据到数据库解决标识列ID问题
- 【转】在eclipse下使用java调用weka 与 在MyEclipse中运行数据挖掘工具weka
- [置顶] 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)
- java XXXvo.java 主表调用其他表表的字段拼接///表中读取数据库里时间数据格式的修改
- 在eclipse下使用java调用weka 与 在MyEclipse中运行数据挖掘工具weka
- JAVA从菜鸟【入门】到新手【实习】一一一一算法,数据结构与数据库
- 数据挖掘---分类算法之神经网络算法BPN实践
- java调用cmd命令 exp导出数据库表格数据
- java数据调用及调用数据库
- 基于.NET实现数据挖掘--神经网络算法原理
- 在java中调用weka聚类方法并显示相应的类标签+weka中创建arff数据
- 数据挖掘---分类算法之神经网络算法BPN
- mini学生管理系统。。。全部代码,4个java文件放在同一个包下面即可。用JDBC调用数据库取出数据。
- 在eclipse下使用java调用weka 与 在MyEclipse中运行数据挖掘工具weka
- 从数据库读取数据训练神经网络
- weka:调用内置算法挖掘数据关联规则