Random Forest

2024. 9. 19. 14:27·머신러닝

 

Introduction

*bagging: 데이터 셋을 독립적으로 생성하는 데 있어서 복원추출을 사용하는 방법론.

그렇게 복원 추출된 bootstrap에다가 variance가 높고 bias가 낮은 알고리즘(= 복잡도가 높은 알고리즘)을 개별적으로 학습시켜 최종적으로 결합하게 되면 효과를 봅니다.

 

  • Random forest는 이 bagging의 특수한 형태입니다.
  • Random forest는 반드시 decision tree를 base learner로 봅니다.
  • 의사결정나무 알고리즘 여러개를 학습시켜 결합하게 되면 forest가 됩니다.
  • Random forest는 ensemble의 다양성을 확보하기 위한 두가지 메커니즘을 갖고 있습니다.
    • bagging
    • 변수를 랜덤으로 선택한다.

Algorithm

  • bootstrap size t만큼의 random sample을 만듭니다.
  • 변수를 split 할 때 해당하는 영역을 분할하는 과정에서 원래 p개의 변수 중에서 m개의 변수만을 선택합니다.
    • e.g., 이번 영역에 대한 data를 분할할 때는, $x_1$만 사용한다. $x_2$는 사용하지 않는다. 이렇게 제약을 하는 것을 의미합니다.
  • 이렇게 해서 의사결정 나무를 만들고 결과를 결합한다.

More detail

  • 위 그림에서 왼쪽으로 가는 게 training data이고 오른쪽이 OOB data입니다.

 

Randomly selected variable

  • bootstrap을 통해 선택된 데이터 셋이 있습니다. X는 25차원의 데이터입니다.
  • bagging tree: bagging을 한 각각의 bootstrap에다가 모든 변수를 사용해서 의사결정나무를 쓰는 것입니다.
    • bootstrap을 이용하여 random으로 sampling한 후 decision tree 한개를 만듭니다.
    • 이 과정을 여러번 반복합니다.
    • 이 결과들을 하나로 묶으면 bagging tree라고 할 수 있습니다.
    • 이때, $T_1$, $T_2$, ..., $T_B$의 결과는 거의 비슷합니다. (왜냐면 같은 dataset에서 random sampling 한 것이기 때문입니다.)
  • random forest는 위와 같은 그림이 있을 때 bootstrap을 사용한 후 -> random variable selection을 거치고 -> decision tree를 만듭니다.
  • 변수 선택이 들어갔기 때문에 개별 tree의 성능은 떨어지지만, 이를 여러 개의 tree로 묶으면 성능이 올라갑니다. (이게 random forest의 재밌는 점입니다.)

 

Generalization Error (일반화 성능)

$Generalization\ Error\leq\frac{\bar\rho(1-s^2)}{s^2}$

  • 여기서, $\rho$는 각각의 tree들이 갖고 있는 결과들의 상관관계이고,
  • $s^2$는 얼마나 정확한지 나타내는 지표입니다.
  • 따라서 알고리즘이 정확할수록 $s^2$는 높아지고, 개별 모델의 다양성이 높을수록 $\rho$는 낮아집니다.
  • 즉, 개별 모델들이 성능이 높고, 그 모델들이 서로 연관성이 낮을수록 일반화 성능이 좋아집니다.

 

 

Variable Importance

 

  • Random Forest의 장점은 변수의 중요도를 산출할 수 있다는 것입니다.
  • dataset에서 bootstrap을 사용해 tree를 만들고, 남은 OOB data를 이 tree에 적용합니다.
    • train data를 재사용하지 않으면서 validation을 할 수 있습니다.
  • $e_i$는 원래 OOB 데이터에 넣었을 때 에러입니다. $p_i$는 OOB data에서 중요도를 산출하고자 하는 $x_i$를 permutation 한 것의 에러입니다.
  • 만약 $x_i$가 split에 사용되지 않았으면, $p_i$는 $e_i$와 같습니다. 왜냐면 그 변수를 사용하는 과정에서 tree에 한번도 사용되지 않았기 때문입니다.
    • 이를 다시 말하면 i번째 변수는 중요하지 않은 변수라는 것을 뜻합니다.
  • $x_i$가 split에 자주 사용될수록 $p_i>e_i$가 될 것입니다. 왜냐면 random으로 permutation해서 정보를 뒤죽박죽 바꿔버렸기 때문입니다. 따라서 바뀌기 전의 데이터의 변수를 갖고 만든 모델이 망가져버린 것입니다.
  • 정리하면, 둘 사이의 차이 ($p_i-e_i$)가 크면 클수록 중요한 변수로 판단합니다.

Example

  • 예를 들어, 위에서 보이는 것처럼 원래 값인 $x_i$를 permutation 합니다.
  • 만약 변수 i가 tree를 split 하는 데 한 번도 사용되지 않았다면, 즉, $x_1$, $x_2$, $x_7$만 사용되고 $x_i$는 사용되지 않았다고 하면, 원래 OOB data를 이용한 orginal 에러율 $e_i$와 permutation 시킨 $p_i$가 같아집니다.
  • 그렇기 때문에 tree를 split 하는 데 사용되지 않은 변수라면 중요하지 않은 변수라고 할 수 있습니다.

  • 이번에는, $x_i$가 여러 곳에서 사용된 중요한 변수라고 하겠습니다.
  • 그렇다면 정보를 뒤죽박죽 섞었기 때문에 원래 OOB data의 에러율인 $e_i$보다 permutation시킨 에러율 $p_i$가 훨씬 크게 나타날 것입니다.

 

  • m번째 tree에서 변수 i에 대한 random permutation 전후 OOB error의 차이는 아래와 같습니다.

$d_i^m=p_i^m-e_i^m$

  • 전체 Tree들에 대한 OOB error 차이의 평균 및 분산입니다.

$\bar{d}_i=\frac{1}{m}\sum_{i=1}^m d_i^m$, $s_i^2=\frac{1}{m-1}\sum_{i=1}^m (d_i^m-\bar{d}_i)^2$

  • i번째 변수의 중요도입니다.

$v_i=\frac{\bar{d}_i}{s_i}$

-> 평균이 높고 분산이 낮을수록 변수의 중요도는 올라갑니다.

 

 

[출처] : https://www.youtube.com/watch?v=nu_6PB1v3Xk&list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&index=24

 

 

 

 

'머신러닝' 카테고리의 다른 글

Logistic Regression  (2) 2024.09.22
MLP (Multi Layer Perceptron)  (0) 2024.09.21
XGBoost  (1) 2024.09.21
SVM (Support Vector Machine) 1탄  (1) 2024.09.20
KNN & decision tree  (0) 2022.11.15
'머신러닝' 카테고리의 다른 글
  • MLP (Multi Layer Perceptron)
  • XGBoost
  • SVM (Support Vector Machine) 1탄
  • KNN & decision tree
chaeniverse
chaeniverse
통계 학도입니다. 지금은 현업에서 data scientist로 근무하고 있습니다. 인공지능(머신러닝/딥러닝)에 관심이 많습니다.
  • chaeniverse
    채스
    chaeniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • 통계학 (11)
      • 머신러닝 (7)
      • 딥러닝 (3)
      • 논문 리뷰 (1)
      • etc (0)
      • Project (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 포트폴리오
  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
chaeniverse
Random Forest
상단으로

티스토리툴바