我正在 Ubuntu服务器(无GUI )中使用 Weka 3.8.3 。我已经使用WekaPackageManager
安装了LibLINEAR库,但是无法使用命令行运行它。
作为旁注。 Weka没有安装Package Manager。它在/vendor
目录中。
使用默认分类器,WEKA运行良好。这是一个有关如何从命令行调用它们的示例。
java -cp ./vendor/weka-3-8-3/weka.jar weka.classifiers.trees.J48 ...
我需要安装外部软件包,例如LibLINEAR
时出现问题。根据{{3}}中的建议,我已经使用Weka软件包管理器安装了它们。
java -cp weka.jar weka.core.WekaPackageManager -install-package LibLINEAR
我认为它们已正确安装。
# Output: java -cp weka.jar weka.core.WekaPackageManager -list-packages installed
Installed Repository Loaded Package
========= ========== ====== =======
1.0.10 1.0.10 Yes LibSVM: A wrapper class for the libsvm tools
1.9.8 1.9.8 Yes LibLINEAR: A wrapper class for the liblinear classifier
注意:无论如何,我无法在系统上找到任何具有这些名称的新.JAR文件,因此我无法弄清楚WekaPackageManager的工作原理。
接下来,根据文档:
1.4.2运行已安装的学习算法。
但是使用软件包管理器安装的软件包中的算法又如何呢?我们不需要每次运行特定算法时都向我们的类路径中添加大量的jar文件。幸运的是,我们不必这样做。 Weka具有一种在运行时动态加载已安装软件包的机制。我们可以使用“运行”命令来运行命名算法。
我知道我必须使用Weka.Run
来执行新安装的软件包,但是我无法使其工作。
这是我尝试过的事情的清单。
当我以这种方式运行分类器时:
java -cp ./vendor/weka-3-8-3/weka.jar weka.Run weka.classifiers.functions.LibLINEAR ...
我收到以下消息:
Can't find scheme weka.classifiers.functions.LibLINEAR, or it is not runnable.
由于-list-packages installed
输出的是软件包已加载,我试图在没有Weka.Run
语句的情况下运行WEKA,但是我得到了
Error: Could not find or load main class weka.classifiers.functions.LibLINEAR
最后,如此处的建议: official documentation
我已经下载了LibLinear库,并以此方式添加到类路径中。
java -cp ./vendor/weka-3-8-3/weka.jar:./vendor/weka-3-8-3/liblinear-2.20.jar weka.classifiers.functions.LibLINEAR ...
但是错误与第一次尝试相同。
Error: Could not find or load main class weka.classifiers.functions.LibLINEAR
任何建议将不胜感激
(P。S:对不起,我的英语)
我想我已经找到问题了。该命令可以直接从命令行正常运行
java -cp "./vendor/weka-3-8-3/weka.jar:./vendor/weka-3-8-3/liblinear-2.20.jar" weka.Run weka.classifiers.functions.LibLINEAR -S 1 -C 1.0 -E 0.001 -B 1.0 -L 0.1 -I 1000 -t "temp/diabetes/models/bag-of-words/range-1/ngram-1-1-50.arff" -v -o
但不能在PHP中使用exec
在脚本中。我认为该软件包安装在www-data
用户无法访问的目录中。
我已经将wekafiles
目录从我的主目录复制到vendor
目录中,并且我已经通过以下方式启动了Java:
java -DWEKA_HOME=./vendor/weka-3-8-3/wekafiles -cp ./vendor/weka-3-8-3/weka.jar weka.Run weka.classifiers.functions.LibLINEAR -S 1 -C 1.0 -E 0.001 -B 1.0 -L 0.1 -I 1000 -t ...
此解决方案对我有用,但我认为还有更好的选择。