Weka manual 3.6翻译: 16.1 选项处理

原创
2012/11/24 22:35
阅读数 548

16.1 选项处理

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

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

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

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

options[1] = "1";

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

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

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

     尾随空白-使用“-R ”也将失败,因为尾随空格没删除,因此选项R将无法识别。

避免这些问题最简单的方法,是提供一个 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));

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部