2012-09-06 84 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如果此答案適合您,請將其標記爲答案 –