当使用pythonwekawraper运行weka时,如何设置测试选项?

2024-09-30 00:35:39 发布

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

我正在使用JRip分类器探索python的weka包装器。我加载了数据集,构建了一个模型,并提取了规则,没有任何重大问题

现在,据我所知,使用Weka Explorer时,10倍交叉验证是默认选项,如下图所示

Weka Explorer

因此,我假设如果我运行相同的JRip分类器,但使用python编写,默认模式将是10倍交叉验证,但我不确定。我的代码如下:

import weka.core.jvm as jvm

from weka.core.converters import Loader
from weka.classifiers import Classifier,Evaluation
from random import randint

jvm.start()
url = 'C:/Data/train_dataset.csv'
loader = Loader(classname = 'weka.core.converters.CSVLoader')
data = loader.load_file(url)
data.class_is_last()
seed = randint(1,99e6)
optimizations = 15 
options = f'-F 3 -N 2.0 -O {optimizations} -S {seed}'.split()
jrip = Classifier(classname = 'weka.classifiers.rules.JRip',options=options)
jrip.build_classifier(data)
ruleset = jrip.jwrapper.getRuleset()
for i in range(ruleset.size()):
    rule = ruleset.get(i)
    print(rule.toString(data.class_attribute.jobject))

代码非常标准,主要是从weka网站的示例中提取的(以前从未在Python中使用过weka)

我也读过关于有crossvalidate_模型方法的评估类,但我不确定这是否是我要寻找的,以及如何正确使用它

如何在python脚本中构建模型并应用不同的设置,或者知道实际使用的是哪些设置?例如,如果我想增加折叠次数或使用其他设置,如Percentage splitSupplied test集或Use training set


Tags: 代码fromcore模型importdata分类器jvm
1条回答
网友
1楼 · 发布于 2024-09-30 00:35:39

评价

在代码示例中,您在完整数据集上训练了分类器(JRip),没有执行交叉验证或任何其他形式的评估。weka.classifiers.EvaluationPython类用于评估模型

example repository包含以下示例:

只有test_model需要经过训练的分类器(当您根据测试集评估其预测时)。crossvalidate_modelevaluate_train_test_split方法应该只接收配置的分类器对象,而不是经过训练的分类器

期权处理

如果您想知道分类器设置了哪些选项,只需通过options属性检索选项列表。如果要更改它们,请通过为同一属性提供列表来设置它们

c = Classifier(...)
# print current options
print(c.options)
# set new options
c.options = ['-SOME', 'NEW', 'OPTIONS'] 

或者,您可以调用Classifier的to_commandline()方法,以获得与Weka在Weka Explorer中复制时提供的相同的命令行字符串(Weka中的大多数类,如过滤器、分类器和集群,都是选项处理程序,即它们具有此方法)

由于Weka的选项处理有点不同(嵌套是通过双引号完成的,内部嵌套是通过反斜杠转义引号完成的),因此应该使用weka.core.classes模块中的方法split_options将命令行字符串(带或不带类名)拆分为值列表

或者,您可以使用weka.core.classes模块的from_commandline()方法,而不是手动拆分命令行字符串,该方法允许您将包含classname和option的单个字符串拆分为Weka对象。例如:

from weka.core.classes import from_commandline
cmdline = 'weka.classifiers.functions.SMO -K "weka.classifiers.functions.supportVector.NormalizedPolyKernel -E 3.0"'
classifier = from_commandline(cmdline, classname="weka.classifiers.Classifier")

相关问题 更多 >

    热门问题