R로 데이터 분석하기 - 모델링 (3) : 랜덤포레스트(Random Forest)

1 minute read

1. 랜덤포레스트 in R

R에서도 randomForest 패키지를 이용해 랜덤포레스트 알고리즘을 사용할 수 있다.

파이썬 머신러닝에서의 랜덤포레스트

먼저 패키지를 설치하고 불러와보자.

install.packages("randomForest") # 최초 한 번만 설치
library(randomForest)

summary(weather)로 확인해보면 NA 값을 가진 변수들이 몇 가지 보인다. 이 NA 값은 우선 제거를 해주자. na.omit()을 사용하면 된다.

weather <- na.omit(weather)

다음으로 train, test 데이터를 나누기 위해 train 데이터가 될 데이터의 인덱스를 임의로 추출해볼 것이다. 인덱스 임의 추출에는 sample() 함수를 사용하며, train 데이터는 전체 데이터의 70%로, 나머지 30%는 test 데이터로 할 것이다.

idx <- sample(1:nrow(weather),nrow(weather)*0.7)
train <- weather[idx,]
test <- weather[-idx,] # 해당 인덱스 제외하고 추출

Random Forest 모델로 학습을 시킨 후, predict()로 예측을 해보자. 예측한 결과는 0 ~ 1 사이의 확률값으로 나오게 된다. 따라서, 실제로 우리가 원하는 “비가 온다(1) / 오지 않는다(0)”을 예측하기 위해 ifelse()로 처리를 해줄 것이다.

rf_model <- randomForest(Rain2~Temp_mean+Dust+Humidity,data=train)

pred <- predict(rf_model,newdata=test)
pred2 <- ifelse(pred>0.5,1,0) # 0.5 보다 크면 1, 아니면 0

예측한 결과가 실제 Rain2의 값과 얼마나 일치하는지를 확인해보자.

table(pred2,test$Rain2)
pred2   0   1
    0 143  13
    1  11  22

이러한 Contingency Table(분할표)를 이용해 예측 성능이 얼마나 좋은지를 확인해볼 수 있다. 이를 바탕으로 정확도(Accuracy) 등을 계산해낼 수 있으며 caret 패키지의 confusionMatrix()를 이용하면 성능 평가 지표를 자동으로 계산해 보여주기도 한다. 이 경우, 정확도는 87.3%인 것으로 나왔다.

분류 평가방법 (1) - 정확도(Accuracy), 정밀도(Precision), 재현율(Recall)

Leave a comment