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));

相關文章
相關標籤/搜索