pythonwekawrapper:未找到chisquaredAttributeVal类

2024-07-08 12:41:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Python中与Weka一起工作。我想使用weka.attributeSelection.ChiSquaredAttributeEval进行属性选择。但是,我反复得到这个错误:

Failed to get class weka/attributeSelection/ChiSquaredAttributeEval
Exception in thread "Thread-1" java.lang.NoClassDefFoundError: weka/attributeSelection/ChiSquaredAttributeEval
Caused by: java.lang.ClassNotFoundException: weka.attributeSelection.ChiSquaredAttributeEval
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

不过,我可以使用另一种属性选择方法weka.attributeSelection.CfsSubsetEval。有人能告诉我现在该怎么做才能使ChiSquaredAttributeEval工作吗?在

(我在某个地方读到我应该手动设置jvmclass_path,就像jvm.start(class_path=mypath)一样,但是没有帮助。)

我使用的是python2.7.13、pythonweka包装器0.3.10、java1.7.0。在


Tags: runlangnet属性jvmjavaatclass
1条回答
网友
1楼 · 发布于 2024-07-08 12:41:13

ChiSquaredAttributeEval属性求值不是核心Weka的一部分,而是一个单独的package。因此,您需要使用jvm.start(packages=True)(来自API文档)启动包含包的JVM。在

下面是一个工作示例:

import sys
import weka.core.jvm as jvm
import weka.core.packages as pkg
from weka.core.converters import Loader
from weka.attribute_selection import ASSearch
from weka.attribute_selection import ASEvaluation
from weka.attribute_selection import AttributeSelection

# start JVM with packages
jvm.start(packages=True)

# package installed?
chisq_name = "chiSquaredAttributeEval"
chisq_installed = False
for p in pkg.installed_packages():
    if p.name == chisq_name:
        chisq_installed = True
if not chisq_installed:
    pkg.install_package(chisq_name)
    print("pkg %s installed, please restart" % chisq_name)
    jvm.stop()
    sys.exit(1)

# load a dataset
data_file = "/adjust/the/path/anneal.arff"
print("Loading dataset: " + data_file)
loader = Loader("weka.core.converters.ArffLoader")
anneal_data = loader.load_file(data_file)
anneal_data.class_is_last()

# perform attribute selection
search = ASSearch(classname="weka.attributeSelection.Ranker", options=["-N", "-1"])
evaluation = ASEvaluation(classname="weka.attributeSelection.ChiSquaredAttributeEval")
attsel = AttributeSelection()
attsel.search(search)
attsel.evaluator(evaluation)
attsel.select_attributes(anneal_data)
print("# attributes: " + str(attsel.number_attributes_selected))
print("attributes: " + str(attsel.selected_attributes))
print("result string:\n" + attsel.results_string)

jvm.stop()

相关问题 更多 >

    热门问题