2012-09-06 85 views
3

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

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

许多不同的变化并没有为我工作,我还就如何指“Y”或是否需要行内的基准不清楚。

另一个例子是我不能解决的-abs(log(a7)-3)。关于如何使这些陈述有效的任何想法?

回答

1

MathExpression

的 'A' 信的Javadoc参照属性的正被处理的值。 其他属性值(仅数字),可通过 访问的变量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函数,但ifelse函数。因此,您应该写点类似于

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

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

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

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

+0

感谢您的回复,我相信这是正确的。但是,我无法设法让MathExpression应用于没有设置值的新属性,所以这可能是问题所在。有关于此的任何想法? – sarina

+0

@sarina用AddExpression更新了答案。 –

+0

@sarina如果此答案适合您,请将其标记为答案 –