2017-12-23 26 views
0

저는 Machine Learning에 완전히 익숙하지 않기 때문에 경우에 따라 이해가 잘못되었을 수도 있습니다. weka를 사용하여 Java 코드를 통해 저장된 모델을로드하여 데이터를 테스트하려고합니다.저장된 모델을 사용하여 Java 코드 (Weka)를 통해 데이터를 테스트하십시오.

Instances testingData = readArffFile(testFile); 
      try 
      { 
       LibSVM cls = (LibSVM) weka.core.SerializationHelper.read(model); 

       Evaluation eval = new Evaluation(testingData); 
       eval.crossValidateModel(cls, testingData, 10, new Random(1)); 
       //eval.evaluateModel(cls, testingData); 
} 

모델을 저장할 때 교차 유효성 검사를 사용했습니다. 이제는 eval.crossValidateModel() 또는 eval.evaluateModel() 중 어떤 것을 사용하든 다소 혼란 스럽습니다.

내가 evaluateModel()을 사용하면 틀린 정확도를 제공합니다 (예상보다 훨씬 높음). 나는 이것이 같은 데이터에 대해라인을 훈련시키고 나중에 동일한 데이터에 대한 테스트를하기 때문이라고 생각한다. 이것은 내가 원하는 것이 아닙니다. 나는 훈련없이 모델에서 데이터를 테스트하고 싶다. (모델은 훈련 후에 저장된다.)

eval.crossValidateModel()을 사용한다면, 나는 모델링을 다시하고 있다고 생각한다. 왜냐하면 crossvalidation이 데이터 집합을 k-fold를 수행 한 다음 k-1에 대한 학습을 ​​수행 한 다음 나머지 접기에 대해 테스트합니다.

이렇게로드 된 모델을 사용하여 테스트를 수행하는 방법이 있습니까?

미리 감사드립니다.

답변

0

열차 데이터에 eval을 만들어보세요. Evaluation eval = new Evaluation(train);

그런 다음 기차 데이터가없는 경우 사용 : Evaluation eval = new Evaluation(test); eval.useNoPriors(); eval 사용 eval.evaluateModel(classifier, test);을 만든 후 테스트 데이터를 분류 할 수 있습니다.