【问题标题】:Weka runtime errorWeka 运行时错误
【发布时间】:2017-12-05 02:56:54
【问题描述】:

我正在尝试复制我的训练数据集的第一个属性,并从测试集中复制相应的属性以进行簿记。我的代码编译成功。但我无法运行它。

运行 java WekaRF 时出现以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: weka/core/converters/CSVLoader
    at WekaRF.main(WekaRF.java:17)
Caused by: java.lang.ClassNotFoundException: weka.core.converters.CSVLoader
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

如果我运行 java -cp weka-3-8-1/weka.jar WekaRF,我会得到

Error: Could not find or load main class WekaRF

我的代码如下

import java.io.*;
import java.util.Random;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.RandomForest;
import weka.core.Instances;
import weka.filters.unsupervised.attribute.Remove;
import weka.core.converters.*;

public class WekaRF {
    public static void main(String[] args) {
        int percent = 60;
        Instances data = null;
        try {
            CSVLoader loader = new CSVLoader();
            loader.setSource(new File("../../rf.csv"));
            data = loader.getDataSet();
        } catch (Exception e) {
            e.printStackTrace();
            return;
            }
        int TrainSize = (int) Math.round(data.numInstances() * percent/ 100);
        int TestSize = data.numInstances() - TrainSize;

        Instances Train = new Instances(data, 0, TrainSize);
        Instances Test = new Instances(data, TrainSize, TestSize);
        System.out.println(Test.attribute(0).name());
        Remove remove = new Remove();
        String[] options = new String[2];
        options[0] = "-R";
        options[1] = "1";
        remove.setOptions(options);
        remove.setInputFormat(data2);
        Test = Filter.useFilter(Test, remove);
        Train.setClassIndex(Train.numAttributes() - 1);
    }
}

【问题讨论】:

    标签: java weka runtimeexception


    【解决方案1】:

    您的类路径不包括当前目录,因此 java 没有看到您的 WekaRF 类。 尝试改用java -cp .;weka-3-8-1/weka.jar WekaRF。 注意-cp 参数开头的点。它表示当前目录。

    Upd:用于分隔各个类路径条目的字符取决于操作系统。 Windows 使用;,大多数其他系统使用:。实际路径分隔符可以通过查询java.io.File::pathSeparator字段来获取。

    【讨论】:

    • 你是对的,路径分隔符是系统依赖的。 Windows 使用;,大多数其他系统使用:
    猜你喜欢
    • 2012-09-18
    • 2016-12-13
    • 2012-07-13
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多