inflearn logo
강의

講義

知識共有

ビッグデータ分析記事実技コントラスト(R活用)

predict.randomForest

532

ssyh978317

投稿した質問数 2

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

안녕하세요.

 

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

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

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

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

 

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

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

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

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

 

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

2

ssyh978317

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

작업형 1 유형 부분

0

12

1

작업형 1 (삭제예정, 구 버전)

0

31

2

작업형 2유형 수업에서

0

122

2

작업형 3유형

0

106

1

작업형 1유형 코드 과정 및 답안

0

188

1

작업형2유형 rmse값

0

230

2

f1 스코어

0

139

2

작업 2유형 제출형식

0

114

2

작업형 2유형 인덱스값

0

117

2

이번시험 작업형2 질문

0

274

1

4회 작업형 2유형 문제 불러왔을 때 변수가 안보이는데요

0

220

1

작업형 1유형의 3번문제(ratio)

0

206

1

출제예상 문제 질문이요~

0

199

1

섹션 4 작업형 2유형 (16:29) 결과 추가 문의

1

387

2

비지도학습

0

341

1

predict함수 type 질문

0

551

1

이상치 처리시

0

405

1

작업2유형 - 4회 기출 질문 드립니다

0

404

1

dplyr 라이브러리의 select 함수를 궂이 써야하는 이유가 있을까요?

0

375

2

맨 마지막 p3에서 2,482명이 나와야 되는거 아닌가요???

0

567

3

가설검정결과 채택의 의미에 대해 의문사항이 있습니다!

1

452

2

예시문제 작업형2번

0

464

1

6회 시험 실기유형 변경

0

314

2

작업2유형 분류문제

0

400

2