在Weka中使用AddExpression / MathExpression

时间:2012-09-06 03:31:13

标签: filter attributes preprocessor weka

我正在进行一项非常基本的WEKA任务,我正在尝试使用WEKA从GUI(最新版本)预处理数据。我试图在双击MathExpression时在表达式框中执行非常基本的if语句和数学语句,但我没有取得任何成功。例如,我想做

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

这个的许多不同变体对我没有用,我也不清楚如何引用“y”或者它是否需要行内的引用。

另一个例子是-abs(log(a7)-3),我也无法解决这个问题。关于如何使这些陈述发挥作用的任何想法?

1 个答案:

答案 0 :(得分:1)

来自MathExpression

的javadoc
  

'A'     letter表示正在处理的属性的值。     可以访问其他属性值(仅限数字)     变量A1,A2,A3,......

您的过滤器适用于数据集的所有属性。如果我加载iris数据集并应用以下过滤器。

  

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 ) 

此过滤器也适用于所有属性。如果您只想更改一个属性并根据其他属性值;然后你需要使用“忽略范围选项”并使用A1,A2来引用其他属性值。

如果您需要添加新属性,请使用AddExpression

  

通过将数学表达式应用于现有属性来创建新属性的实例过滤器。