我有一个网格搜索代码:
from weka.classifiers import GridSearch
data = loader.load_file(data_dir + "bolts.arff")
data.class_is_last()
grid = GridSearch(options=["-sample-size", "100.0", "-traversal", "ROW-WISE", "-num-slots", "1", "-S", "1"])
grid.evaluation = "CC"
grid.y = {"property": "kernel.gamma", "min": -3.0, "max": 3.0, "step": 1.0, "base": 10.0, "expression": "pow(BASE,I)"}
grid.x = {"property": "C", "min": -3.0, "max": 3.0, "step": 1.0, "base": 10.0, "expression": "pow(BASE,I)"}
cls = Classifier(
classname="weka.classifiers.functions.SMOreg",
options=["-K", "weka.classifiers.functions.supportVector.RBFKernel"])
grid.classifier = cls
grid.build_classifier(data)
print("Model:\n" + str(grid))
print("\nBest setup:\n" + grid.best.to_commandline())这给我带来了这样的错误:
Failed to get class weka.classifiers.meta.GridSearch
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: weka.classifiers.meta.GridSearch
Caused by: java.lang.ClassNotFoundException: weka.classifiers.meta.GridSearch
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)同样,对于多重搜索,我有以下代码:
from weka.classifiers import MultiSearch
multi = MultiSearch(options=["-S", "1"])
multi.evaluation = "CC"
mparam = MathParameter()
mparam.prop = "classifier.kernel.gamma"
mparam.minimum = -3.0
mparam.maximum = 3.0
mparam.step = 1.0
mparam.base = 10.0
mparam.expression = "pow(BASE,I)"
lparam = ListParameter()
lparam.prop = "classifier.C"
lparam.values = ["-2.0", "-1.0", "0.0", "1.0", "2.0"]
multi.parameters = [mparam, lparam]
cls = Classifier(
classname="weka.classifiers.functions.SMOreg",
options=["-K", "weka.classifiers.functions.supportVector.RBFKernel"])
multi.classifier = cls
multi.build_classifier(data)
print("Model:\n" + str(multi))
print("\nBest setup:\n" + multi.best.to_commandline())也会出现这样的错误:
Exception in thread "Thread-0" java.lang.ClassNotFoundException: weka.core.setupgenerator.AbstractParameter
...我看到每个人都说要解决这个错误,你需要安装软件包,但我已经全部安装了。
经检查:
items = packages.installed_packages()
for item in items:
print(item.name + " " + item.url)这给了我:
gridSearch http://prdownloads.sourceforge.net/weka/gridSearch1.0.12.zip?download
timeseriesForecasting http://prdownloads.sourceforge.net/weka/timeseriesForecasting1.1.27.zip?download
LibSVM http://prdownloads.sourceforge.net/weka/LibSVM1.0.10.zip?download
multisearch https://github.com/fracpete/multisearch-weka-package/releases/download/v2020.2.17/multisearch-2020.2.17.zip并检查所有软件包是否安装了最新版本及其正确版本,并:
success, exit_required = install_missing_packages([("gridSearch", LATEST),("multisearch", LATEST)])
if exit_required:
jvm.stop()
sys.exit(0)所以我不知道我是否应该通过这个错误,或者我应该做些什么。
我不得不说,当我执行它时,它给了我一个解决方案,但也引起了这个错误,所以我不知道该怎么做。
谢谢你们。
发布于 2022-02-21 22:40:58
您列出的异常不会影响脚本的执行,因为它们是由pww3在内部处理的(遗憾的是,错误输出无法被抑制,尽管捕获了异常;这将由底层的javabridge获得输出)。
--背景:,因为pww3可以在没有包支持的情况下运行,所以它首先尝试使用Java加载类。如果失败(这是您看到的错误消息),它将尝试使用Weka的加载类机制加载它们。
刚刚发布的版本0.2.7 of pww3更智能一些,避免了这些异常的输出。
最后注意事项:--在使用MultiSearch时,需要在属性名中删除classifier.前缀。
https://stackoverflow.com/questions/71131619
复制相似问题