基于weka实现的神经网络算法实现

一、算法实现 

package demo7;

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;

/**
 * 基于weka实现的神经网络算法实现
 * @author mengfeiyang
 *
 */
public class BPDeep2 {  
  
    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}
            };  
          
        //读入训练集数据  
        String path = "E:/imgfolder/train.arff";
        System.out.println(path);
        File inputFile = new File(path);//该文件见源代码最后的分享连接,能够下载后将路径替换掉  
        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 

@relation 'test'
@attribute CUR numeric
@attribute PRE numeric
@data
-0.81,-0.85
-0.8,-0.81
-0.82,-0.8
-0.83,-0.82
-0.913,-0.83
-0.75,-0.913
-0.945,-0.75
-0.94,-0.945
-0.877,-0.94
-0.814,-0.877
-0.92,-0.814
-0.9025,-0.92
-0.886,-0.9025
-0.78,-0.886
-0.97,-0.78
-0.9145,-0.97
-0.85,-0.9145
-0.97,-0.85
-0.9,-0.97
-0.97,-0.9
-0.91,-0.97
-0.85,-0.91
-0.8,-0.85
-0.9249,-0.8
-0.93,-0.9249
-0.99,-0.93
-0.933,-0.99
-0.002,-0.933
-0.958,-0.002
-1,-0.958
-0.4115,-1
-0.951,-0.4115
-0.67,-0.951
-0.91091425,-0.67
-0.95,-0.91091425
-0.9454,-0.95
-0.9,-0.9454
-0.92,-0.9
-0.92075,-0.92
-0.914175,-0.92075
-0.95,-0.914175
-0.65,-0.95
-0.998,-0.65
-0.8795,-0.998
-0.9,-0.8795
-0.9995,-0.9

三、执行结果

E:/imgfolder/train.arff
-0.8387689167154422,,,-0.93
-0.8435666578599861,,,-0.93
-0.8435666578599861,,,-0.93
-0.8435666578599861,,,-0.95
-0.8420460436187248,,,-0.93
-0.8435666578599861,,,-0.95
-0.8420460436187248,,,-0.93
-0.8435666578599861,,,-0.93
-0.8435666578599861,,,-0.95
-0.8420460436187248,,,-0.9
-0.8459234640790234,,,-0.92
-0.8443420634975742,,,-0.575
-0.8777601385075624,,,-0.23
bp success!
相关文章
相关标签/搜索