Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用pythonweka包装器运行weka时设置测试选项?_Python_Python 3.x_Weka - Fatal编程技术网

如何在使用pythonweka包装器运行weka时设置测试选项?

如何在使用pythonweka包装器运行weka时设置测试选项?,python,python-3.x,weka,Python,Python 3.x,Weka,我正在使用JRip分类器探索python的weka包装器。我加载了数据集,构建了一个模型,并提取了规则,没有任何重大问题 现在,据我所知,使用Weka Explorer时,10倍交叉验证是默认选项,如下图所示 因此,我假设如果我运行相同的JRip分类器,但使用python编写,默认模式将是10倍交叉验证,但我不确定。我的代码如下: import weka.core.jvm as jvm from weka.core.converters import Loader from weka.cla

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

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

因此,我假设如果我运行相同的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脚本中构建模型并应用不同的设置,或者知道实际使用的是哪些设置?例如,如果我想增加折叠次数或使用其他设置,如
百分比分割
提供的测试
集或
使用训练集

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

包含以下示例:

  • (文件:)
  • (文件:,方便方法:)
只有
test\u模型
需要经过训练的分类器(当您根据测试集评估其预测时)。
crossvalidate\u model
evaluate\u train\u test\u split
方法应仅接收配置的分类器对象,而不是经过训练的分类器

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

c=分类器(…)
#打印当前选项
打印(c.选项)
#设置新选项
c、 选项=['-SOME',“NEW',“options']
或者,您可以调用Classifier的
to_commandline()
方法,以获得与Weka在Weka资源管理器中复制时提供的相同的命令行字符串(Weka中的大多数类,如过滤器、分类器和集群,都是选项处理程序,即它们具有此方法)

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

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

从weka.core.classes从命令行导入
cmdline='weka.classifiers.functions.SMO-K“weka.classifiers.functions.supportVector.NormalizedPolyKernel-e3.0”
分类器=来自命令行(cmdline,classname=“weka.classifiers.classifier”)