2016-06-30 1 views
0

R의 randomForest 함수는 54 개 범주 미만의 범주 형 예측 변수 만 처리 할 수 ​​있음을 이해하고 잘 알고 있습니다. 그러나 범주 형 예측자를 54 개 범주 미만으로 줄이면 여전히 오류가 발생합니다. stackoverflow에 대한 범주 적 예측 자 한계를 살펴본 적이있는 유일한 질문은이 범주 제한을 해결하는 방법이지만 함수 수를 제한하기 위해 범주 수를 줄이려고하고 있으며 여전히 오류가 발생합니다.randomForest 범주 형 예측 자 제한

다음 스크립트는 '직업'을 예측할 수 있도록 데이터 프레임을 만듭니다. 이해할 수있는 것은, 'college_id'변수로 인해 'df'에 randomForest()를 실행하려고하면 "53 개 이상의 카테고리가있는 범주 적 예측 변수를 처리 할 수 ​​없습니다."라는 오류가 발생합니다.

하지만 상위 40 개의 대학 ID 만 포함하도록 데이터를 자르면 동일한 오류가 발생합니다. 'df2'데이터 프레임에 40 개가 채워지더라도 모든 범주를 유지하는 기본 데이터 프레임 개념이 누락 되었습니까? 사용할 수있는 해결 방법은 무엇입니까?

library(dplyr) 
library(randomForest) 

# create data frame 
df <- data.frame(profession = sample(c("accountant", "lawyer", "dentist"), 10000, replace = TRUE), 
      zip = sample(c("32801", "32807", "32827", "32828"), 10000, replace = TRUE), 
      salary = sample(c(50000:150000), 10000, replace = TRUE), 
      college_id = as.factor(c(sample(c(1001:1040), 9200, replace = TRUE), 
             sample(c(1050:9999), 800, replace = TRUE)))) 


# results in error, as expected 
rfm <- randomForest(profession ~ ., data = df) 


# arrange college_ids by count and retain the top 40 in the 'df' data frame 
sdf <- df %>% 
    dplyr::group_by(college_id) %>% 
    dplyr::summarise(n = n()) %>% 
    dplyr::arrange(desc(n)) 
sdf <- sdf[1:40, ] 
df2 <- dplyr::inner_join(df, sdf, by = "college_id") 
df2$n <- NULL 


# confirm that df2 only contains 40 categories of 'college_id' 
nrow(df2[which(!duplicated(df2$college_id)), ]) 


# THIS IS WHAT I WANT TO RUN, BUT STILL RESULTS IN ERROR 
rfm2 <- randomForest(profession ~ ., data = df2) 

답변

1

나는 여전히 변수에 모든 요인 수준이 있다고 생각합니다. 다시 포리스트에 들어가기 전에 다음 줄을 추가하십시오.

df2$college_id <- factor(df2$college_id) 
+0

그건 ... 고마워! – bshelt141