이번에는 Random Forest (랜덤포레스트)에 대해 알아보겠습니다. 랜덤포레스트는 의사결정나무 (decision tree)를 여러개 모아서 만든 모델입니다. 의사결정나무가 갖고 있는 overfitting 문제를 해결하고 정확도를 높히는 모델이 Random forest입니다. 랜덤포레스트 학습을 위한 bagging, feature 선택과 랜덤포레스트 학습 방법을 보도록 하겠습니다.
Bagging을 이용한 랜덤포레스트
bagging 이란 것에 보도록 하겠습니다. 데이터 셋이 $D = \{ (x_i,y_i) | i=1,2,…M\}$ 있다고 합시다. 이 데이터셋 전체를 사용하지 않고 일부만 이용해 학습을 하는것을 bagging이라 부르는것 같아요.
데이터 셋 $D$에서 $N$개의 원소만 뽑아 새로운 데이터셋 $T = \{ (x_{t_i}, y_{t_i} | i =1 ,2,…N\}$를 만듭니다.여기서 주목할점은 원소를 뽑을 때 중복을 허락합니다. 이 데이터셋 $T$ 를 이용해 의사결정나무 $h_T$를 학습할 수 있겠죠. 하나의 의사결정나무 뿐만 아니라 여러개의 의사결정나무를 만들수 있습니다. 다음과 같은 알고리즘을 생각할 수 있겠죠.
$B$를 어떤 자연수라고 하자. $N$은 데이터 셋 $D$의 원소보다 작은 숫자
for i =1 2,3,…,B:
데이터 셋 $D$에서 중복을 허락하여 N개의 원소를 뽑아 데이터 셋 $T_i$를 만든다.
$T_i$를 이용해 의사 결정나무 $h_{i}$를 학습한다.
새로운 데이터 $x$를 입력한다. 분류문제라면 $h_{i}(x)$ 값 중 가장 많이 나온 값을 예측값으로 사용한다.
스리쓸쩍 랜덤포레스트의 학습과정을 설명했네요. 맞아요 bagging을 통해 여러 의사결정나무를 학습하고 새로운 데이터를 만들어논 여러개의 의사결정나무에 넣어서 가장 많이 나온 결과값을 사용하는 것을 랜덤포레스트라고 합니다.
그런데 여기서 문제가 하나있다고 하네요. 의사결정나무 여러개를 만들면서 사용하는 feature가 동일할 경우 의사결정 나무 $h_i$간의 correlation 이 높아진다고 하네요. 서로 다른 모델이라고 생각했는데 correlation 이 높다면 같은 모델을 사용한다고 볼수 있습니다. 이를 해결하기 위한 방법은 아래와 같습니다.
Feature 선택
위에서 랜덤포레스트 학습방법을 봤습니다. 아래와 같이 bagging을 사용했는데요.
$B$를 어떤 자연수라고 하자. $N$은 데이터 셋 $D$의 원소보다 작은 숫자
for i =1 2,3,…,B:
데이터 셋 $D$에서 중복을 허락하여 N개의 원소를 뽑아 데이터 셋 $T_i$를 만든다.
$T_i$를 이용해 의사 결정나무 $h_{i}$를 학습한다.
새로운 데이터 $x$를 입력한다. 분류문제라면 $h_{i}(x)$ 값 중 가장 많이 나온 값을 예측값으로 사용한다.
여기서 한가지만 수정하겠습니다. $h_{i}$를 학습시 모든 feature를 사용하지 않고 사용할 feature를 몇개를 임의추출해해 학습합니다. 이럼으로써 $h_i$간의 correlation 이 줄어든다고 하네요. 정리하자면 아래와 같습니다.
랜덤포레스트 학습방법
$B$를 어떤 자연수라고 하자. $N$은 데이터 셋 $D$의 원소보다 작은 숫자. $K$는 사용할 feature 개수
for i =1 2,3,…,B:
데이터 셋 $D$에서 중복을 허락하여 N개의 원소를 뽑아 데이터 셋 $T_i$를 만든다.
$T_i$를 이용해 의사 결정나무 $h_{i}$를 학습한다. 학습시 K개의 feature만 사용하고 K개의 feature는 새롭게 선택한다.
새로운 데이터 $x$를 입력한다. 분류문제라면 $h_{i}(x)$ 값 중 가장 많이 나온 값을 예측값으로 사용한다.
정리
랜덤포레스트는 의사결정나무 여러개를 학습해서 의사결정나무 결과에서 투표를 통해 추정하는 모델이다. 모든 feature를 사용할경우 의사결정나무 간의 correlation 이 높아질 가능성이 있어서, 원래 feature보다 적은 수의 feature를 사용하여 의사결정나무를 사용한다.
출처
-위키피디아