java调用Weka中神经网络的算法(从数据库中取数据)

本文介绍如何使用WEKA 3.6版本中的BP神经网络进行数据预测,并提供了详细的代码示例。通过加载训练数据集和手动创建测试数据集的方式,展示了如何建立并训练一个多层感知器模型。

http://blog.youkuaiyun.com/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
  1. import java.io.File;  
  2. import java.io.IOException;  
  3.   
  4.   
  5. import weka.classifiers.functions.MultilayerPerceptron;  
  6. import weka.core.Attribute;  
  7. import weka.core.FastVector;  
  8. import weka.core.Instance;  
  9. import weka.core.Instances;  
  10. import weka.core.converters.ArffLoader;  
[java]  view plain  copy
  1. public class Test2 {  
  2.   
  3.     public static void main(String[] args) throws IOException {  
  4.         //便于测试,用数组保存一些数据,从数据库中取数据是同理的  
  5.         //二维数组第一列表示当月的实际数据,第二列是上个月的数据,用于辅助对当月数据的预测的  
  6.         //二维数组的数据用于测试集数据,为了展示两种weka载入数据的方法,将训练集数据从arff文件中读取  
  7.         double[][] a = {{-0.93,-0.995},{-0.93,-0.93},{-0.93,-0.93},{-0.95,-0.93},{-0.93,-0.95},  
  8.                             {-0.95,-0.93},{-0.93,-0.95},{-0.93,-0.93},{-0.95,-0.93},{-0.9,-0.95},  
  9.                             {-0.92,-0.9},{-0.575,-0.92},{-0.23,-0.575}};  
  10.           
  11.         //读入训练集数据  
  12.         File inputFile = new File("G:\\weka3.6\\Weka-3-6\\data\\train.arff");//该文件见源代码最后的分享链接,可以下载后将路径替换掉  
  13.         ArffLoader atf = new ArffLoader();  
  14.         try {  
  15.             atf.setFile(inputFile);  
  16.         } catch (IOException e1) {  
  17.             e1.printStackTrace();  
  18.         }  
  19.         Instances instancesTrain = atf.getDataSet();   
  20.         instancesTrain.setClassIndex(0);//设置训练数据集的类属性,即对哪个数据列进行预测(属性的下标从0开始)  
  21.           
  22.         //读入测试集数据  
  23.         FastVector attrs = new FastVector();  
  24.               
  25.         Attribute ratio = new Attribute("CUR",1);//创建属性,参数为属性名称和属性号,但属性号并不影响FastVector中属性的顺序  
  26.         Attribute preratio = new Attribute("PRE",2);  
  27.               
  28.         attrs.addElement(ratio);//向FastVector中添加属性,属性在FastVector中的顺序由添加的先后顺序确定。  
  29.         attrs.addElement(preratio);  
  30.               
  31.         Instances instancesTest = new Instances("bp",attrs,attrs.size());//创建实例集,即数据集,参数为名称,FastVector类型的属性集,以及属性集的大小(即数据集的列数)  
  32.               
  33.         instancesTest.setClass(ratio);//设置数据集的类属性,即对哪个数据列进行预测  
  34.           
  35.         for(int k=0;k<13;k++){  
  36.             Instance ins = new Instance(attrs.size());//创建实例,即一条数据  
  37.             ins.setDataset(instancesTest);//设置该条数据对应的数据集,和数据集的属性进行对应  
  38.             ins.setValue(ratio, a[k][0]);//设置数据每个属性的值  
  39.             ins.setValue(preratio, a[k][1]);   
  40.             instancesTest.add(ins);//将该条数据添加到数据集中  
  41.         }  
  42.           
  43.         MultilayerPerceptron m_classifier = new MultilayerPerceptron();//创建算法实例,要使用其他的算法,只用把类换做相应的即可  
  44.           
  45.         try {  
  46.             m_classifier.buildClassifier(instancesTrain); //进行训练  
  47.         } catch (Exception e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.           
  51.         for(int i = 0;i<13;i++){//测试分类结果  
  52.             //instancesTest.instance(i)获得的是用模型预测的结果值,instancesTest.instance(i).classValue()获得的是测试集类属性的值  
  53.             //此处是把预测值和实际值同时输出,进行对比  
  54.             try {  
  55.                 System.out.println(m_classifier.classifyInstance(instancesTest.instance(i))+",,,"+instancesTest.instance(i).classValue());  
  56.             } catch (Exception e) {  
  57.                 e.printStackTrace();  
  58.             }  
  59.         }  
  60.         System.out.println("bp success!");  
  61.     }  
  62.   
  63. }  


train.arff

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值