2013-08-24 3 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 개 인스턴스를 가지고 있고 특정 조건이 충족되는 경우, 각 인스턴스에 대해보고하려합니다. 조건이 true이면 교육/테스트 세트에서 인스턴스를 제거합니다.

Weka에는 이런 식으로 인스턴스를 직접 제거 할 수있는 옵션이 없다고 생각합니다. 어떤 제안, 찬성?

+0

현재 질문, 당신은 좀 더 세부 사항을 절망적으로 애매 제공 할 수있는 RemoveWithValues filter 사용하고 적용 할 수 있는가? –

+0

나는 @hooshM –

답변

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); 
    } 
} 

필터 방식

사용 웨카 인스턴스 필터 중 하나 (supervised 또는 unsupervised) 또는 직접 작성.

예를 들어, 당신은 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

님의 질문을 편집했습니다. 나는 순진한 접근 방식을 시도했고 효과가있었습니다. –

관련 문제