【问题标题】:run WEKA on Linux在 Linux 上运行 WEKA
【发布时间】:2011-10-01 22:02:09
【问题描述】:

我已经下载并解压了以下 WEKA 版本 weka-3-4-19。这是在linux操作系统上。我希望通过命令行使用 WEKA,但是在执行时

java weka.classifiers.tress.j48.J48

我收到以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: weka/classifiers/tress/j48/J48
Caused by: java.lang.ClassNotFoundException: weka.classifiers.tress.j48.J48
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: weka.classifiers.tress.j48.J48.  Program will exit.

有人可以帮我解决这个问题吗?谢谢。


编辑1:

在尝试 java -jar weka.jar 命令时

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
    at java.awt.Window.<init>(Window.java:432)
    at java.awt.Frame.<init>(Frame.java:403)
    at javax.swing.JFrame.<init>(JFrame.java:202)
    at weka.gui.GUIChooser.<init>(GUIChooser.java:98)
    at weka.gui.GUIChooser.main(GUIChooser.java:285)

No X11 DISPLAY variable was set, but this program performed an operation which requires it.

编辑 2:

在尝试 java.weka.classifiers.trees.J48

Exception in thread "main" java.lang.NoClassDefFoundError: weka/classifiers/tress/J48
Caused by: java.lang.ClassNotFoundException: weka.classifiers.tress.J48
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: weka.classifiers.tress.J48.  Program will exit.

编辑 3:

{cslinux2:~/weka-3-4-19} echo $CLASSPATH
/people/cs/j/jld082000/weka-3-4-19/weka.jar:
{cslinux2:~/weka-3-4-19} java weka.classifiers.trees.J48

Weka exception: No training file and no object input file given.

General options:

-t <name of training file>
    Sets training file.
-T <name of test file>
    Sets test file. If missing, a cross-validation will be performed on the training data.

【问题讨论】:

  • edit3:你到底期待什么?你没有给它任何数据......你可以像它告诉你的那样通过命令行传递数据,或者使用我提到的方式拉出 GUI

标签: java linux class weka


【解决方案1】:

我在 macOS 中运行 Linux Developer 版本。您可以复制下面的.bash_profile 并根据您的需要进行修改。

当我回答here时,您可以将以下内容发送到您的~/.bash_profile

export R_HOME="/Applications/R.app/Contents/MacOS/R"    #for WEKA MLR R plugin 
export CLASSPATH="/Applications/weka-3-9-1/weka.jar"    #for WEKA commandline
export WEKAINSTALL="/Applications/weka-3-9-1"

export WEKA_HOME="/Applications/weka-3-9-1"
export CLASSPATH=$CLASSPATH;$WEKA_HOME/weka.jar
export HEAP_OPTION=-Xms4096m -Xmx8192m
export JAVA_COMMAND java $HEAP_OPTION

在此之后并刷新终端,您应该能够运行以下命令

java weka.classifiers.trees.J48 -t $WEKAINSTALL/data/iris.arff

【讨论】:

    【解决方案2】:

    这个“weka.classifiers.trees.j48.J48”是 Weka 文档中的错字。应该是这样的:“weka.classifiers.trees.J48”

    而不是设置 $CLASSPATH 的替代方法是:

    java -cp /pathto/weka.jar weka.classifiers.trees.J48
    

    另外,你可能想给它更多的内存来玩,以加快速度:

    java -Xmx1G -cp /pathto/weka.jar weka.classifiers.trees.J48
    

    为了运行分类器(就像您尝试做的那样),您至少需要给它一些数据,这些数据必须已经转换为 ARFF 格式。

    要对某些数据运行测试,请输入:

    java -Xmx1G -cp /path/to/weka.jar weka.classifiers.trees.J48 -t /path/to/whatever.arff
    

    -t 用于训练文件。

    请看这里: Weka Primer

    【讨论】:

    • 比公认的答案更有用,特别是对于希望从命令中使用 Weka 的初学者
    【解决方案3】:

    这仅仅意味着weka.classifiers.tress.j48.J48 类不在classpath 中。您可以使用-classpath 开关编写java 命令或设置CLASSPATH(永久)变量。另一种方法是使用@jberg 所指的-jar 开关。

    编辑:

    正如我所检查的(我从 that site 下载了 Weka 3-4-19),weka.jar 包中肯定没有 weka.classifiers.tress.j48.J48 类。可能您正在寻找:

    java weka.classifiers.trees.J48
    

    例如:

    $ export CLASSPATH=/home/grzegorz/weka-3-4-19/weka.jar:.
    $ echo $CLASSPATH 
    /home/grzegorz/weka-3-4-19/weka.jar:.
    $ java weka.classifiers.trees.J48
    
    Weka exception: No training file and no object input file given.
    
    General options:
    
    -t <name of training file>
        Sets training file.
    ...
    

    【讨论】:

    • 这是我试过的。之后我在我的问题中调用了该函数。我错过了什么吗?谢谢你。导出 CLASSPATH=/people/cs/j/jld082000/weka-3-4-19/weka.jar:$CLASSPATH
    • @rookie:您导出了 CLASSPATH,但 weka.jar 库中没有 weka.classifiers.tress.j48.J48 类。请参阅我的更新答案。
    • 请参阅 Edit2 我的问题。它仍然出错。我发现很难理解可能是什么问题。另外,您是如何找到 weka.jar 库中的可用内容的?谢谢。
    • @rookie:尝试在我的回答中使用示例命令。 weka.jar 只是 ZIP 存档,所以你可以查看它(例如 weka/classifiers/tress 目录意味着 weka.classifiers.tress 包)。
    • @rookie:嗯,AFAIK 在echo 命令中没有“魔法” :) 它只是在标准输出流上显示 CLASSPATH 的值,仅此而已。
    【解决方案4】:

    我没有在linux上使用过WEKA,但是我觉得它只是打包成jar文件,所以你想:

    java -jar weka.jar

    您还可以使用 weka 源 jar 在您自己的代码中使用分类器,方法是将其包含在您的构建路径中,就像您使用其他 jar 一样。

    【讨论】:

    • 我不确定 X11 DISPLAY 变量是什么。
    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2019-04-29
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多