println не печатать мои значения во втором методе - PullRequest
0 голосов
/ 03 марта 2019

Начинающий, я работаю над тем, чтобы сделать weka api и делать прогнозы с использованием регрессии.У меня есть некоторый код, в котором я преобразую набор данных в числовой в основном методе, а затем в следующем методе я делаю прогнозы.К сожалению, когда я запускаю код, прогнозы не выводятся на консоль.

Буду очень признателен за небольшую помощь, спасибо.

package weka.api;

import weka.core.Instances;
import weka.core.converters.ArffSaver;
import java.io.File;
import weka.core.converters.ConverterUtils.DataSource;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.NominalToBinary;
import weka.classifiers.functions.SMOreg;
import weka.core.Instance;
import weka.classifiers.bayes.NaiveBayes;
import weka.filters.unsupervised.attribute.Discretize;

public class DiscretizeAttribute {

    public static void main(String[] args) throws Exception {
        //load dataset
        DataSource source = new DataSource("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes.arff");
        Instances dataset = source.getDataSet();
        //set options

        String[] options1 = new String[2];
        options1[0] = "-R";
        options1[1] = "first-last";

        NominalToBinary n2b = new NominalToBinary();
        n2b.setOptions(options1);
        n2b.setInputFormat(dataset);


        Instances newData = Filter.useFilter(dataset, n2b);

        ArffSaver saver = new ArffSaver();
        saver.setInstances(newData);
        saver.setFile(new File("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes1.arff"));
        saver.writeBatch();

        //convert diabetes-test to numeric
        DataSource source1 = new DataSource("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes_test.arff");
        Instances dataset1 = source1.getDataSet();
        //set options

        String[] options2 = new String[2];
        options2[0] = "-R";
        options2[1] = "first-last";
        //options1[2] = "-A";

        NominalToBinary n2b1 = new NominalToBinary();
        n2b1.setOptions(options2);
        n2b1.setInputFormat(dataset1);

        Instances newData1 = Filter.useFilter(dataset1, n2b1);

        ArffSaver saver1 = new ArffSaver();
        saver1.setInstances(newData1);
        saver1.setFile(new File("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes_test1.arff"));
        saver1.writeBatch();

    }

    public void ClassifyInstance() throws Exception {
        DataSource source = new DataSource("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes1.arff");
        Instances trainDataset = source.getDataSet();
        //set class index to the last attribute
        trainDataset.setClassIndex(trainDataset.numAttributes()-1);

        //build model
        SMOreg smo = new SMOreg();
        smo.buildClassifier(trainDataset);
        //output model
        System.out.println(smo);

        //load new dataset
        DataSource source1 = new DataSource("D:/Uni Work/COS5022-B _Coursework 1/Diabetes/diabetes_test1.arff");
        Instances testDataset = source1.getDataSet();

        //set class index to the last attribute
        testDataset.setClassIndex(testDataset.numAttributes()-1);

        //loop through the new dataset and make predictions
        System.out.println("======================");
        System.out.println("Actual Class, SMO Predicted");
        for (int i = 0; i < testDataset.numInstances(); i++) {
            //get class double value for current instance
            double actualValue = testDataset.instance(i).classValue();

            //get instance object of current instances
            Instance newInst = testDataset.instance(i);

            //call classifyInstance, which returns a double value for the class
            double predSMO = smo.classifyInstance(newInst);
            System.out.println(actualValue+", "+predSMO);

        }
    }
}
...