인프런 커뮤니티 질문&답변

신영환님의 프로필 이미지
신영환

작성한 질문수

빅데이터분석기사 실기대비 (R 활용)

predict.randomForest

작성

·

424

1

제5회 작업형 2유형 가지고 풀어봤습니다. 선생님 덕분에 깔끔하게 쓸 수 있게 됐네요. 작년에는 개념을 아예 모르고 냅다 암기만 해서 얼마나 당황했는지..;;

str(df)

df$model <- as.factor(df$model)

df$year <- as.factor(df$year)

df$transmission <- as.factor(df$transmission)

df$fuelType <- as.factor(df$fuelType)

str(df)

inx <- createDataPartition(df$price, p = 0.7, list = F)

train <- df[inx,]

test <- df[-inx,]

model1 <- randomForest(price~.,data=train)

p1 <- predict(model1, test)

rmse(p1, test$price)

tst$model <- as.factor(tst$model)

tst$transmission <- as.factor(tst$transmission)

tst$fuelType <- as.factor(tst$fuelType)

tst$year <- as.factor(tst$year)

df <- df[,-2]

tst <- tst[,-2]

model2 <- randomForest(price~.,data=df)

p2 <- predict(model2, tst)

result <- data.frame(pred = p2)

write.csv(result, 'C://r/result.csv', row.names=FALSE)

result_check <- read.csv('result.csv')

result_check

이런 식으로 선생님께서 알려주신 방법대로 했었는데, randomForest 모델 만들고 tst 데이터에다가 predict 적용할 때 에러가 났었습니다.

Type of predictors in new data do not match that of the training data.

?predict, ?predict.randomForest 둘 다 해봐도 도통 원인을 모르겠어서 결국 인터넷 검색을 해봤더니 factor가 너무 종류가 많아서 일어나는 문제라고 하더군요;;

그래서 앞으로 돌아와서

df <- df[,-2]

tst <- tst[,-2]

두 행 추가해서 20개의 factor를 가진 year 칼럼을 삭제하고 다시 돌렸더니 그땐 됐습니다. train, test가지고 나눠서 해봤을 때 rmse가 1521이라고 나왔습니다만 회귀 문제라 좋은 건지 어떤지 모르겠더라구요. rpart보다 randomForest에서 rmse가 더 낮았으니까 성능이 더 좋다 이런 상대적인 판단만 가능했습니다.

비슷하게 19개의 factor를 가진 model 칼럼을 날려버릴지 year 칼럼을 날려버릴지 고민됐는데 어느 쪽이 더 성능이 좋을지는 시험에 나온 데이터셋 가지고 해봐야겠네요. 범주형 데이터 다 넣어보고 빼보고 rmse 해서 비교해보겠습니다.

결론은.. 회귀 문제가 나왔고 randomForest 모델 썼는데 predict에서 Type of predictors in new data do not match that of the training data.이런 에러가 나오면 factor가 너무 많은 칼럼을 과감하게 날려버리자! 였습니다. 제대로 판단한 건지 모르겠습니다만 혹시 벼락치기로 기출 풀어보시는 분들 있다면 공유차 글 작성합니다.

답변 1

0

companionclub님의 프로필 이미지
companionclub
지식공유자

안녕하세요.

 

해당에러메시지는 말씀하신대로 Factor의 Level이 너무 많아서 나올 수 있습니다.

Factor형은 자동적으로 R에서 원핫인코딩을 해서 칼럼을 새로 만들게 되는데,

그 Factor중 일부만 Train에 남고 나머지가 Test에 있거나 반대의 경우가되면 칼럼숫자가 맞지않아서

위와 같이 매칭되지 않는다고 메시지가 나옵니다.

 

그럴 경우, 말씀하신대로 그냥 그 칼럼을 제외하고 모델을 만드는 방법을 권장합니다.

물론 모든 칼럼을 잘 전처리해서 넣으면 성능이 좋을 수 있곘지만,

목표를 시험을 통과할만한 점수를 받자로 가정헀으니 굳이 그렇게하지않고 Factor의 Level이

너무많은 (주관적인요소지만.. 한 10개쯤이 넘는) 경우에는 과감히 제외하는 것을 권장드립니다.

 

좋은 피드백 감사드립니다.

신영환님의 프로필 이미지
신영환
질문자

와 안그래도 이번 시험에 딱 그렇게 오류가 뜨더라고요!! 주어진 train 데이터를 다시 train, test로 나눠서 해봤을 때는 잘 돌아갔는데 막상 실제로 train, test에다가 적용해보니 에러가 나길래 혹시나 해서 그 q4였나 하는 칼럼.. 제페토인지 마인크래프트인지 등등 11개 factor로 되어있던 칼럼 지워버리고 돌렸습니다. 성능은 0.94에서 0.88정도로 떨어지긴 했습니다만 그래도 잘 돌아갔습니다!!

신영환님의 프로필 이미지
신영환

작성한 질문수

질문하기