더북(TheBook)

랜덤 포레스트

랜덤 포레스트Random Forest는 앙상블Ensemble 학습 기법을 사용한 모델이다. 앙상블 학습은 주어진 데이터로부터 여러 개의 모델을 학습한 다음, 예측 시 여러 모델의 예측 결과들을 종합해 사용하여 정확도를 높이는 기법을 말한다.

랜덤 포레스트는 두 가지 방법을 사용해 다양한 의사 결정 나무를 만든다. 첫 번째는 의사 결정 나무를 만들 때 데이터의 일부를 복원 추출로 꺼내고 해당 데이터에 대해서만 의사 결정 나무를 만드는 방식이다. 즉, 각 의사 결정 나무는 데이터의 일부만을 사용해 만들어진다. 두 번째는 노드 내 데이터를 자식 노드로 나누는 기준을 정할 때 전체 변수가 아니라 일부 변수만 대상으로 하여 가지를 나눌 기준을 찾는 방법이다.

새로운 데이터에 대한 예측을 수행할 때는 여러 개의 의사 결정 나무가 내놓은 예측 결과를 투표voting 방식으로 합한다. 예를 들어, 총 5개의 의사 결정 나무 중 Y를 예측한 나무가 3개, N을 예측한 나무가 2개면 Y를 최종 결과로 결정하는 방식이다.

랜덤 포레스트는 일반적으로 성능이 뛰어나고 의사 결정 나무 하나가 아니라 여러 개를 사용해 과적합 문제를 피한다.

R의 randomForest는 랜덤 포레스트를 구현한 패키지다.

표 10-5 랜덤 포레스트

randomForest::randomForest : 랜덤 포레스트를 생성한다.

randomForest::randomForest(
  formula,          # 모델 포뮬러
  data,             # 포뮬러를 적용할 데이터
  ntree=500,        # 나무의 개수
  mtry,             # 노드를 나눌 기준을 정할 때 고려할 변수의 수
  importance=FALSE  # 변수의 중요도 평가 여부
)

반환 값은 randomForest 객체다.

randomForest::predict.randomForest : randomForest를 사용한 예측을 수행한다.

randomForest::predict.randomForest(
  object,   # randomForest 객체
  newdata,  # 예측을 수행할 데이터
  # 예측 결과의 유형
  # - response: 예측값
  # - prob: 예측 확률의 행렬
  # - vote: 투표 결과 행렬
  type=c("response", "prob", "vote")
)

반환 값은 예측 결과다.

randomForest::importance : randomForest로부터 변수 중요도를 출력한다.

randomForest::importance(
  x,  # randomForest 모델
  # 출력할 변수 중요도 유형으로 1은 정확도(Accuracy), 2는 노드 불순도로 변수 중요도를 표시한다.
  # type이 지정되지 않으면 정확도, 불순도 모두에 대한 중요도가 출력된다.
  type=NULL
)

randomForest::varImpPlot : 변수 중요도의 그래프를 그린다.

randomForest::varImpPlot(
  x,
  type=NULL
)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.