Как я могу предсказать немеченые данные с помощью файла .arff в Weka? - PullRequest
1 голос
/ 25 мая 2019

У меня есть обучающие и тестовые файлы "labeleled.arff".Затем я строю классификатор и записываю в файл "modelFile.model".

У меня есть файл «unlabeled.arff» с последним атрибутом в каждой строке «?».

Как я могу сделать прогноз в Java или C #?У меня есть код, но он не верный, всегда дает мне один и тот же прогноз.

Спасибо

// Write to Model
public static void Classify()
{
                Instances train = new Instances(new java.io.FileReader(dirTrain + "labeled.arff"));
                Instances test = new Instances(new java.io.FileReader(dirTest + "labeled.arff"));

                train.setClassIndex(train.numAttributes() - 1);
                test.setClassIndex(test.numAttributes() - 1);

                // train Classifier
                Classifier cl = new J48();

                // Randomize the order of the instances in the dataset
                weka.filters.Filter myRandom = new weka.filters.unsupervised.instance.Randomize();
                myRandom.setInputFormat(train);
                train = weka.filters.Filter.useFilter(train, myRandom);

                // Build the classifier
                cl.buildClassifier(train);

                // evaluate classifier and print some statistics
                Evaluation eval = new Evaluation(train);
                eval.evaluateModel(cl, test);
                Console.WriteLine(eval.toSummaryString("\nResults Decision Tree\n======\n", false));

                SerializationHelper.write(dirModel + "modelFile.model", cl);

}

// Make predictions
public void Predictions()
{
            Classifier cl = (Classifier)SerializationHelper.read(dirModel + "modelFile.model");

            // load unlabeled data
            Instances unlabeled = new Instances(new java.io.FileReader(pathFeatures + "unlabeled.arff"));

            // set class attribute
            unlabeled.setClassIndex(unlabeled.numAttributes() - 1);

            // create copy
            Instances labeled = new Instances(unlabeled);

            // label instances
            for (int i = 0; i < unlabeled.numInstances(); i++)
            {
                double clsLabel = cl.classifyInstance(unlabeled.instance(i));
                labeled.instance(i).setClassValue(clsLabel);
            }

            int numCorrect = 0;
            for (int i = 0; i < unlabeled.numInstances(); i++)
            {
                double pred = cl.classifyInstance(unlabeled.instance(i));
                Console.Write("ID: " + unlabeled.instance(i).value(i));
                //Console.Write(", actual: " + unlabeled.classAttribute().value((int)unlabeled.instance(i).classValue()));
                Console.WriteLine(", predicted: " + unlabeled.classAttribute().value((int)pred));
            }

            Console.WriteLine("Correct predictions: " + numCorrect);

}
...