3

私は非常に基本的なWEKA割り当てに取り組んでおり、WEKAを使用してGUI(最新バージョン)からのデータを前処理しようとしています。MathExpressionをダブルクリックすると、式ボックスで非常に基本的なifステートメントと数学ステートメントを実行しようとしていますが、成功していません。例えばやりたい

if (a5 == 2 || a5 == 0) then y = 1; else y = 0

これの多くの異なるバリエーションは私にはうまくいきませんでした。また、「y」を参照する方法や、行内で参照が必要かどうかもわかりません。

もう1つの例は、-abs(log(a7)–3)ですが、これも解決できませんでした。これらのステートメントを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

1

MathExpressionのjavadocから

「A」の文字は、処理されている属性の値を示します。他の属性値(数値のみ)には、変数A1、A2、A3、...を介してアクセスできます。

フィルタは、データセットのすべての属性に適用されます。アイリスデータセットをロードして、次のフィルターを適用した場合。

weka.filters.unsupervised.attribute.MathExpression -E log(A)。

属性、sepallengthの値は次のように変化します。

Before Filter      After Filter           
Minimum 4.3    Minimum  1.459
Maximum 7.9    Maximum  2.067
Mean    5.843  Mean 1.755
StdDev  0.828  StdDev   0.141

また、javadocを見ると、if else関数はなく、ifelse関数があります。したがって、次のように書く必要があります

ifelse ( (A == 2 || A == 0), 1,0 ) 

また、このフィルターはすべての属性に適用されます。1つの属性のみを変更し、他の属性値に従って変更する場合; 次に、「範囲オプションを無視」を使用し、A1、A2を使用して他の属性値を参照する必要があります。

新しい属性を追加する必要がある場合は、AddExpressionを使用してください。

既存の属性に数式を適用して新しい属性を作成するインスタンスフィルター。

于 2012-09-06T06:00:20.783 に答える