2013-08-24 173 views
2

我在Weka Java API中使用了一段代碼。在代碼中,我試圖做一些事情如下:刪除Weka中的實例

for (each instance i in the training/test set) 
     if (condition == TRUE) 
      remove instance (i) from training/test set; 

[編輯]例如,我有1000個實例,我想看看每個實例,如果滿足特定條件。如果條件爲真,那麼我將從訓練/測試集中移除實例。

我相信Weka沒有這種方式直接刪除實例的選項。任何建議,優點?

+0

您當前的問題是無可救藥含糊,你能提供一些更多的細節? –

+0

我編輯了這個問題@JoshM –

回答

7

我在這裏看不到問題。

天真方法

遍歷數據集中的所有實例,並刪除符合您的條件的人。

Instances data; 
... 

// it's important to iterate from last to first, because when we remove 
// an instance, the rest shifts by one position. 
for (int i = data.numInstances - 1; i >= 0; i--) { 
    Instance inst = data.getInstance(i); 
    if (condition(inst)) { 
     data.delete(i); 
    } 
} 

篩選方法的實例的Weka過濾

使用一個(supervisedunsupervised)或自己編寫。

例如,你可以使用RemoveWithValues filter和應用Batch filtering

Instances data; 
RemoveWithValues filter = new RemoveWithValues(); 

String[] options = new String[4]; 
options[0] = "-C"; // attribute index 
options[1] = "5"; // 5 
options[2] = "-S"; // match if value is smaller than 
options[3] = "10"; // 10 
filter.setOptions(options); 

filter.setInputFormat(data); 
Instances newData = Filter.useFilter(data, filter); 
+0

謝謝。我嘗試了一種天真的方法,它工作。 –