2011-08-30 5 views
2

우리는 Java 프로그램 내부에서 WEKA 분류자를 구현하려고합니다. 지금까지는 모든 것이 잘 작동하지만 Weka GUI의 트레이닝 세트에서 분류자를 만들 때 분류 정확도를 높이기 위해 StringToWordVector IDF 변환을 사용했습니다.WEKA - Java의 새 데이터 분류 - IDF 변환

새 인스턴스의 Java 내에서 어떻게 인스턴스를 분류 자에 전달하기 전에 새 인스턴스의 각 토큰 값을 설정하기 위해 IDF 변환을 계산합니까?

기본 코드는 다음과 같습니다

Instances ins = vectorize(msg); 
Instances unlabeled = new Instances(train,1); 
Instance inst = new Instance(unlabeled.numAttributes()); 

String tmp = ""; 

for(int i=0; i < ins.numAttributes(); i++) { 
    tmp = ins.attribute(i).name(); 
    if(unlabeled.attribute(tmp)!=null) 
     inst.setValue(unlabeled.attribute(tmp), 1.0); //TODO: Need to figure out the IDF transformed value to put here NOT 1!! 
} 

unlabeled.add(inst); 

unlabeled.setClassIndex(classIdx); 

.....cl.distributionForInstance(unlabeled.instance(i)); 

그래서 내가 분류 할 새 인스턴스에 올바른 값을 넣을 수 있도록 내가이 코딩 가야합니까 어떻게?

그냥

어떤 도움도 대단히 감사하겠습니다 ... IDF의 변형 수 1.0 변경 될 필요가 inst.setValue(unlabeled.attribute(tmp), 1.0); 라인을 취소 할 수 있습니다!

답변

1

이 목적으로 FilteredClassifier를 사용해야합니다. 코드는 다음과 같습니다

 

    StringToWordVector strWVector = new StringToWordVector(); 
    filteredClassifier fcls = new FilteredClassifier(); 
    fcls.setFilter(strWVector); 
    fcls.setClassifier(new SMO()); 
    fcls.buildClassifier(yourdata) 
    //rest of your code 

 

이것은 당신이 once.FilteredClassifier 다른 모든 세부 사항을 담당 전혀 인스턴스를 전달할 수있는 훨씬 더 쉽습니다. 코드는 테스트되지 않지만 시작됩니다.

편집 : 다음과 같은 방법으로 수행 할 수도 있습니다. 이 WEKA 튜토리얼에서 코드 자세한

 

Instances train = ... // from somewhere 
Instances test = ... // from somewhere 
Standardize filter = new Standardize(); 
filter.setInputFormat(train); // initializing the filter once with training set 
Instances newTrain = Filter.useFilter(train, filter); // configures the Filter based on train instances and returns filtered instances 
Instances newTest = Filter.useFilter(test, filter); // create new test se 
 

에 대한 http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Filter-Filtering%20on-the-fly 배치 모드를 참조입니다 HTH

+0

입력 해 주셔서 감사합니다. 나는 이것이 내가 무엇인지 생각하지 않는다. 우리는로드하기를 원하는 사전 분류기를 가지고 있습니다.이 작업을 시도하고 FilteredClassifer의 set 메소드를 사용했지만 출력 형식이 설정되지 않았다는 불만이 있습니다. 나는 그것이 입력으로 훈련 데이터를 원하는 것 같아요 ... 그러나 StringToWordVector 함께 이것을 할 인터페이스가없는 것 같습니다 – NightWolf

+0

편집을 참조하십시오. 대신 배치 모드에서 필터를 적용하는 각 인스턴스에 필터를 적용 .. – iinception

관련 문제