IDE 外部的 Java 应用程序未使用 Weka 类

标签 java netbeans weka

尝试在 Netbeans IDE 之外运行我的应用程序时,我遇到了一些问题。我有一个 GUI,它正在调用一些我自己的类和方法,而这些类和方法又在调用一些 Weka 类。 Weka 类提供输出,显示在 GUI 上。现在,当我在 IDE 上执行此操作时,输出会正确显示。但是,当我尝试创建我的应用程序的 jar 并尝试从 IDE 外部运行该 jar 时,未显示 Weka 类的输出。不过,我用来对数据进行一些解析和处理的类工作正常。最初我认为这是外部 jar 没有正确包含的问题,但我检查了 *PROJECT_HOME*/dist/lib 文件夹,weka.jar 文件似乎在那里。有人可以帮我解决这个问题吗?

提前致谢!

最佳答案

有一件事我可以告诉你,我在 IDE 之外开发了一个应用程序。您只需要在应用程序目录中获取 WEKA 包文件夹并将其作为包导入到您的 java 类应用程序中,然后直接调用 WEKA 分类器或您希望的任何其他工作。 例如,我正在使用 PART 分类器,下面的代码有效并且不言自明。

import java.io.*;
import java.util.Random;
import weka.core.Instances;
import weka.classifiers.Classifier;
import weka.classifiers.rules.PART;
import weka.classifiers.Evaluation;


public class Prediction 
 {

     public double Create(String Rf1,String Rf2,String Rf3) throws Exception
    {
        input p = new input();
    double res=p.classify(Rf1,Rf2,Rf3);
    return res;
    }
 }


  class input
    {
        public double classify(String file1,String file2,String file3) throws Exception
        {
     // ------------> 1. Reading from an ARFF file

            FileReader fr = new FileReader(file1);
            BufferedReader br = new BufferedReader(fr);

                Instances data = new Instances(br);
            br.close();

            // setting class attribute
            data.setClassIndex(data.numAttributes() - 1);

            // -------------> 2. Building a Classifier

            String[] options = new String[1];
            options[0] = "M 2 -C 0.25 -Q 1"; // confidenceFactor = 0.25, minNumObject = 2
            PART tree = new PART(); // new instance of tree
            tree.setOptions(options); // set the options
            tree.buildClassifier(data); // build classifier
            // -------------> 3. Cross-validation

            Evaluation eval = new Evaluation(data);
            eval.crossValidateModel(tree, data, 10, new Random(1));

            // check --------------> 4. Train

            Instances train = new Instances(data);
            Instances test = new Instances(train);

            // train classifier
            Classifier cls = new PART();
            cls.buildClassifier(train);

            // evaluate classifier and print some statistics
            Evaluation eval1 = new Evaluation(train);
            eval1.evaluateModel(cls, test);

            //System.out.println(eval1.toSummaryString("\nResults\n======\n", false));

            // ----------------> 5. Statistics

            String[] options1 = new String[2];
            options1[0] = "-t";
            options1[1] = file1;

            // ----------------> 6. Classifying instances

            // load unlabeled data
            FileReader fr2 = new FileReader(file2);
            BufferedReader br2 = new BufferedReader(fr2);

            Instances unlabeled = new Instances(br2);

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

            // create copy
            Instances labeled = new Instances(unlabeled);  
            double clsLabel[];
            clsLabel = new double[100];
            int count = 0;

            // label instances
            for (int i = 0; i < unlabeled.numInstances(); i++)
            {
                clsLabel[i] = tree.classifyInstance(unlabeled.instance(i));
                labeled.instance(i).setClassValue(clsLabel[i]);
                count++;
            }

            // save labeled data
            FileWriter fw = new FileWriter(file3);
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(labeled.toString());
            bw.newLine();
            bw.flush();
            bw.close();
            fw.close();

                for(int i=0;i<count;i++)
                System.out.println(clsLabel[i]);
            return clsLabel[0];
        } // main
    } // class

关于IDE 外部的 Java 应用程序未使用 Weka 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886227/

相关文章:

java - 是否可以从小程序执行命令?

java - 以编程方式区分最终参数数组和最终参数省略号的任何方法?

java - 无法在 Java 中锁定 .log 文件

java - SMOreg 在 java 代码中花费了太多时间

java - 使用 Weka 进行错误的类别预测

java - 为什么要在发送http请求之前使用Base64相关算法

java - 用于 Maven 项目的 Netbeans Profiler

java - 我如何循环回到 Java * 初学者* 中的主菜单

java - 为什么我的 for 循环没有在 netbeans GUI 上提供输出?

machine-learning - 在 Weka 中为 XOR 情况训练多层感知器的分步指南?