2012-05-24 5 views
0

검색 쿼리를 {Artist, Actor, Politician, Athlete, Facility, Geo, Definition, QA} 클래스 중 하나로 분류하는 분류자를 만들었습니다. 두 개의 CSV 파일이 있습니다. 하나는 분류 자 ​​(300 개의 질의 포함)를 훈련하기위한 것이고 다른 하나는 분류 자 ​​(현재 약 200 개의 질의 포함)를 테스트하기위한 것입니다. 트레이닝 셋과 테스트 세트를 사용하여 weka 지식 흐름으로 분류자를 평가할 때, 대부분의 클래스는 꽤 ​​좋은 정확도에 도달합니다. 웨카 지식 흐름 교육/시험 상황의 설정 :weka의 분류는 명목상 값의 대소 문자를 구분하여 실패합니까?

Weka training/testing setup

훈련 후 나는 쿼리를 분류하는 자바 코드에서 사용 classifier.model에 knowledgeflow에서 다층 퍼셉트론 분류를 저장.

이 모델을 자바 코드로 직렬화 해제 한 후 테스트 세트 CSV 파일의 모든 쿼리를 지식 스트림의 (분배 직렬화 된 클래스 분류기에서 distributionForInstance() - 메소드를 사용하여) 분류 할 때 모든 'Geo'쿼리를 분류합니다. 'Facility'쿼리 및 모든 'QA'쿼리를 'Definition'쿼리로 사용합니다. 이것은 ClassifierPerformanceEvaluator가 나에게 'Geo'및 'QA'쿼리가 실제로 점수가 매겨지고 테스트 쿼리가 동일하다는 (동일한 CSV 파일이 사용 된) 혼란 행렬을 보여주기 때문에 조금 놀랐습니다. distributionForInstance() - 메소드를 사용하는 다른 모든 쿼리 분류는 정상적으로 작동하는 것처럼 보이므로 지식 흐름의 혼동 행렬을 바라 볼 것으로 예상되는 동작을 보여줍니다. 누구든지 가능한 distributionForInstance() - 자바 코드에서 메서드와 지식 흐름 평가 결과 사이의 분류 차이에 대한 원인을 알 수 있습니까?

내가 생각할 수있는 한 가지는 다음과 같습니다. testing-CSV 파일에는 모든 특성 케이스에 많은 특성 값 속성이 포함되어 있습니다. Java 코드에서 분류되기 전에 인스턴스의 모든 속성 값을 인쇄하면 이러한 값은 대문자로 변환됩니다 (DataSource.getDataSet() 메서드는 이와 같이 동작하는 것처럼 보입니다). 이러한 속성의 대소 문자가 CSV 파일 테스트의 일부 인스턴스가 다르게 분류되는 원인이 될 수 있습니까? 나는 명목 값 속성이 대소 문자를 구별한다는 Weka 명세를 읽었다. weka가 이러한 값이 공칭 속성에 대해 미리 정의되지 않았다는 예외를 던지므로 Java 파일에서이 값을 대문자로 변경합니다.

+0

가능한 중복 [웨카 자바 라이브러리 : 분류 인스턴스의 캐릭터 라인 표현을 얻는 방법 (http://stackoverflow.com/questions/10684852/weka-java-library-how-to-get-string-representation- of-classified-instance) –

+0

다른 질문은 실제로 동일한 저자가 있지만 동일한 프로젝트에 관심이 있지만 두 질문이 실제로 다르다고 나는 생각합니다. –

답변

1

weka는 weka 코드에서와 마찬가지로 지식 흐름에서 csv를 해석 할 때 동일한 클래스를 사용합니다. 이것이 왜곡되지 않고 작동 (데이터 세트 - Instances 개체 - 일치)하고 조정하지 않고 작동하는 이유입니다. 항목을 변경하면 항목이 더 이상 일치하지 않습니다. 이것은 weka가 입력 문자열의 대소 문자를 일관되게 처리하고 변경하지 않아도된다는 것을 의미합니다.

정확한 흐름 예제를 사용하여 모델을 만들었 기 때문에 두 번째 모델이 인위적으로 높기 때문에 값을 확인하고 지식 흐름 출력에서 ​​Error on Training Data 값이 아닌지 확인하십시오. 분류 시스템이 두 위치에서 동일하게 수행 할 수도 있지만 다른 통계를보고 있습니다. 의

관련 문제