2017-04-16 4 views
0

python-weka-wrapper v0.3.10을 사용하여 데이터 사전 처리 문제가 있습니다. 일.Python-weka-wrapper를 통해 Numeric에서 Nominal으로 데이터를 변환 할 때 중복 레이블이있는 예외 v0.3.10

create_instances_from_matrices()을 사용하여 ndarray에서 숫자 데이터 유형 인 내 데이터 집합을 생성합니다.

Saver(classname="weka.core.converters.ArffSaver") 

를 통해

그리고 다음 arff 파일에 데이터 집합을 저장 (numeric_data.arff는) 다음

Filter(classname="weka.filters.unsupervised.attribute.NumericToNominal", options=["-R", "first-last"]) 

예외 메시지 출력 등을 명목 유형 내 데이터 세트를 변환하는 시도 :

"Thread-0"스레드의 예외 java.lang.Illeg alArgumentException : A 공칭 속성 (x2)은 중복 레이블 (1)을 가질 수 없습니다. 그러나

, 동일한 데이터 세트 ( numeric_data.arff) 내가 생성하여, 성공적 웨카 GUI 탐색기 v3.8.1을 통해 공칭 유형으로 변환 할 수 있습니다.

어떤 아이디어로도 도움이 될 수 있으면 고맙겠습니다.

감사합니다.

답변

0

문제는 대부분 작은 값 (< 10^6)이며 Weka는 저장시 0.0으로 바뀝니다 (Weka는 기본적으로 소수점 이하 6 자리 만 출력 함). 데이터 집합을 저장하기 전에 데이터 집합에 필터를 적용하면 필터가 작동합니다.

또는 에 파일을 저장할 때 사용할 소수 자릿수를 지정할 수 있습니다 (-decimal 옵션). ArffSaver 클래스의 Javadoc을 참조하십시오.

+0

는 arff 파일에 저장하지 않고 실패 :, 예컨대 이러한 후행 소수를 제거 NumericCleaner 필터를 사용할 수 있습니다. 또한 중복 레이블의 값은 모두 작은 값이 아닌 1 (정수)입니다. –

+0

python-weka-wrapper에는 분석을 위해 스크립트와 데이터 세트를 게시 할 수있는 [메일 링리스트] (https://groups.google.com/forum/#!forum/python-weka-wrapper)가 있습니다. – fracpete

0

NumericToNominal 필터는 매우 바보 같은 필터입니다 (메일 링리스트에 discussion에서 발췌,이 질문에 제대로 답변을). 그것의 유일한 목적은 카테고리 화 된 숫자 값 (예 : 1.0, 2.0을 레이블 1 및 2로 변환)을 쉽게 변환하는 것이 었습니다. 숫자를 레이블로 바꿀 때 소수점 이하 6 자릿수를 자릅니다. 그러나 이것이 중복 레이블을 생성 할 수 있는지 여부는 확인하지 않았습니다. 예 : 2.00000001 및 2.0은 라벨로 2 (또는 2.0)를 생성합니다.

당신은

난 아직 시도했지만했던
# round to specified number of decimals 
decimals = 3 
cleaner = Filter(classname="weka.filters.unsupervised.attribute.NumericCleaner", options=["-R", "first-last", "-decimals", str(decimals)]) 
cleaner.inputformat(data) 
data = cleaner.filter(data)