Weka manual 3.6翻译: 16.1 选项处理

16.1 选项处理 数组

配置一个对象,例如一个分类器, 能够经过调用咱们想要改变的属性的 get/set 方法来实现,就像搜索者(Explorer)作的。或者,若是类实现了 weka.core.OptionHandler 接口,咱们就能够经过setOptions(String[]) 方法使用该对象的能力来解析命令行选项,(对应的方法是 getOptions()其返回一个String[] 数组)。这两种方法之间的区别是,不能使用 setOptions(String[]) 方法来递增地设置选项。选项数组中没有明确指定的选项将使用默认值。 lua

最基本的方法是手动聚集(assemble) String 数组。下面的示例建立一个只包含一个选项“-R”的数组, 它接受一个参数“1”而且使用此选项初始化Remove过滤器: spa

import weka.filters.unsupervised.attribute.Remove; ... 命令行

String[] options = new String[2]; options[0] = "-R"; 翻译

options[1] = "1"; code

Remove rm = new Remove(); rm.setOptions(options); 对象

因为 setOptions(String[]) 方法须要一个全面解析,并正确分隔的数组(经过控制台/命令提示符实现),这种方法的一些常见的陷阱是: 接口

     选项和参数的组合-使用 “-R 1”做为String数组的一个元素会失败,Weka将提示一个错误消息:未知选项 “R 1” 字符串

     尾随空白-使用“-R ”也将失败,由于尾随空格没删除,所以选项R将没法识别。 get

避免这些问题最简单的方法,是提供一个 String 数组,此数组是使用 weka.core.Utils 类的 splitOptions(String) 方法从一个单一的命令行字符串自动生成的。这里是一个示例:

import weka.core.Utils; ...

String[] options = Utils.splitOptions("-R 1 ");

因为该方法将忽略空格,所以使用 "-R 1""-R 1 "将返回相同的结果为“-R 1”

含有不少嵌套选项的复杂命令行是个棘手的问题,例如,支持向量机分类器SMO(package weka.classifiers.functions)的选项,其包括一个内核设置。由于你须要对Java String内的双引号和反斜线进行转义。Weka Wiki文章(译者注:因翻译时从pdf转到doc格式问题,连接就不添加了)Use Weka in your Java code引用了Java OptionsToCode,它能够将任何命令行转成相应的Java源代码。这个例子也可从Weka Examples collectionweka.core.OptionsToCode得到。

为了与使用Remove过滤器的setOptions(String[])方法对比,如下代码段使用

import weka.filters.unsupervised.attribute.Remove; ...

Remove rm = new Remove(); rm.setAttributeIndices("1");

为了找出哪一个选项属于哪一个属性,即get/set方法,最好是看看 setOptions(String[]) getOptions()方法。若是这些方法直接使用成员变量,咱们只须要寻找这些方法,这些方法使外界能够访问成员变量。

使用 set方法,咱们可能常常遇到须要提供weka.core.SelectedTag做为参数其中一个例子是, 元分类器 GridSearchsetEvaluation 方法(位于weka.classifiers.meta包中)。SelectedTag 类在GUI中使用,用于显示下拉列表,使用户可以从预约义值列表中选择。GridSearch 容许用户选择效果评估的统计度量

一个 SelectedTag 使用全部能被选择的 weka.core.Tag 元素组成的数组和Tag的整型或字符串ID来构造例如,GridSearch setOptions(String[]) 方法使用提供的字符串ID来设置评价类型(例如“ACC”表明准确性),或者,若是评估选项丢失了,使用默认的整型ID EVALUATION_ACC。在这两种状况下,数组 TAGS_EVALUATION 将被使用,它定义了全部可能的选项:

import weka.core.SelectedTag; ...

String tmpStr = Utils.getOption(’E’, options);

if (tmpStr.length() != 0)

    setEvaluation(new SelectedTag(tmpStr, TAGS_EVALUATION)) ;

else

    setEvaluation(new SelectedTag(EVALUATION_CC, TAGS_EVALUATION));

相关文章
相关标签/搜索