2014-10-16 3 views
0

의사 결정 트리를 만들려고 할 때 아래 오류를 이해할 수 없습니다. 요인 예측 자란 무엇입니까? 요인 예측 자의 수준 수는 예측 자의 가질 수있는 가능한 값의 수를 나타 냅니까?결정 트리를 만들 수 없습니다. R :

> training_data 
    SCHOOL_TYPE URBAN_RURAL NRC_CLASS 
1743   G   U  FAIL 
2779   U   R   1 
1009   G   U  FAIL 
4188   G   R  PASS 
2264   A   R  PASS 
6798   G   R  PASS 
2734   A   R  PASS 
1004   U   U   2 
747   U   U  FAIL 
1999   A   U   2 
> tree_model = tree(NRC_CLASS~., training_data) 
Error in tree(NRC_CLASS ~ ., training_data) : 
    factor predictors must have at most 32 levels 
> str(training_data) 
'data.frame': 10 obs. of 3 variables: 
$ SCHOOL_TYPE: Factor w/ 154 levels ""," ,01K,31E,61H,81K,83K,85K\nAN,AN03,AN0195,A,U,20120844515,5/17/1996 0:00,INDU P       ,MANJULA,PARTHIBAN,1,"| __truncated__,..: 62 147 62 62 24 62 24 147 147 24 
$ URBAN_RURAL: Factor w/ 153 levels ""," ",",01K,31E,61H,81E,83E,85E\nGG,GG01,GG0378,G,R,20120471621,5/19/1996 0:00,KIRAN N,PUSHPA,VISHWANATHA BELCHADA,4,B,K,N,004GG,78,P,"| __truncated__,..: 149 115 149 115 115 115 115 149 149 149 
$ NRC_CLASS : Factor w/ 117 levels "","01K"," ,01K,31E,61H,81E,83E,85E\nRR,RR01,RR0235,G,R,20120149169,6/25/1995 0:00,BASAVARAJ      ,NINGAMMA,YANKAPPA,4,"| __truncated__,..: 51 14 51 93 93 93 93 16 51 16 

training_data 내가 행과 열을 모두 가지 치기가 설정 한 큰 데이터로 구성 무언가이다.

+2

테이블의 출력 (training_data) 또는 str (training_data) –

+0

@ArtemFedosov, Done을 ​​추가 할 수 있습니까? 테이블 (training_data)이 너무 커서 인쇄 할 수 없었습니다. str (training_data)을 추가했습니다 –

+1

데이터를 정리하거나 변수의 정의를 병합하여 각 변수의 고유 값이 32 개 이상이어야합니다. – ilir

답변

1

문제는 factor 변수입니다. 가지 치기 후에 원래 수준을 유지합니다 (이 수준에는 0 개의 인스턴스가 있음). 당신은 사용되지 않는 모든 수준을 드롭 할 요인에 다시 변환 할 수 있습니다

# define function that reruns factor() for the right columns 
rerun_factor <- function(x) { 
    if (is.factor(x)) return(factor(x)) 
    return(x) 
} 

# run on all columns of your data 
training_data <- as.data.frame(lapply(training_data, rerun_factor)) 

한 가지주의 :이 데이터를 훈련하는 것 때문에, 확인 요인 변수는 테스트 데이터와 동일한 수준을 확인하십시오. 레벨의 명시적인 벡터를 전달하여이를 보장 할 수 있습니다 : factor(x, levels=...).

전체적으로 정리가 끝날 때까지 문자 데이터를 요인으로 변환하는 것을 연기하는 것이 좋습니다. read.xxx 함수에 stringsAsFactors = FALSE을 전달하면 자동으로 변환되지 않습니다.

관련 문제