콜라맛갈비 2021. 3. 22. 02:15
728x90

Random Forest의 역사

단일 트리를 확장할 때 가능한 결정 중, 임의의 부분 집합에서 검색하는 아이디어를 도입한 영향을 받았다. 각 트리를 학습하기 전에 임의로 선택된 부분 공간으로 훈련 데이터를 투영시키는 과정에서 트리 사이에 차이가 발생하게 된다. 랜덤 노드 최적화와 배깅을 결합한 방법과 같은 CART(Classification And Regression Tree)를 사용해 상관관계가 없는 트리로 포레스트를 구성하는 방법을 제시했다.

 

 

 

 

 

Random Forest는 분류, 회귀분석 등에 사용되는 앙상블 학습 방법의 일종이다. 훈련 과정에서 구성한 다수의 결정 트리로부터 분류하거나, 결과값들을 평균으로 예측함으로써 동작하게 된다. 트리들에서 만든 예측을 평균하면서 불안전성을 극복할 수 있다.

학습 데이터에 오버피팅하는 경향이 있으며, 가지치기 같은 방법을 통해 오버피팅을 최소화하기도 한다.

 

아래는 의사결정나무의 장, 단점이다.

GOOD BAD
- 분류, 회귀에서 가장 널리 쓰이는 알고리즘이다
- 성능이 좋고 정확도가 높다
- 간편하고 빠르다
- 큰 데이터 셋에도 잘 사용된다
- 많은 입력 변수를 다룰 수 있다
- 속도와 메모리의 비용이 상대적으로 크다(linear와 비교했을 때)
- 트리 깊이와 개수 설정을 잘못하면 과적합이 발생한다

 

 

 

관련 개념으로 배깅(=Bootstrap aggreating)이 있다.

배깅은 샘플을 여러 번 뽑아 각 모델에 학습시켜 결과물을 집계하는 방법이다. 이때 중복된 데이터가 뽑힐 수 있고, 한 번도 안 뽑힌 샘플 또한 존재할 수 있다.

 

 

 

다음으로 Random Forest의 성능을 높이기 위한 방법들을 알아보겠다.

우선 큰 수의 법칙을 따라 2,000개 이상의 tree들이 필요하다. ‘큰수의 법칙’은 큰 모집단에서 무작위로 뽑은 표본의 평균이 전체 모집단의 평균과 가까울 가능성이 높다는 개념이다.

 

다음으로 하이퍼 파라미터값들을 조정하는 것이다. Random Forest에는 7가지의 하이퍼 파라미터가 있다.

첫 번째, max_depth이다. 

max_depth는 매개변수로 인해 트리가 성장할 수 있는 깊이를 제한할 수 있다. 그래프를 보면 깊이가 깊을수록 training set의 성능은 계속 증가하지만, test set에 대해서는 특정 시점 이후로 빠르게 감소하는 것을 볼 수 있다. max_depth의 Default 값은 None이다.

  
두 번째는 min_samples_split이다.

min_samples_split은 decision tree에 주어진 노드를 분할하기 위해 필요한 최소 관측 수를 알려주는 매개변수다.
Default값은 2인데, 2로 설정하면 왼쪽 그래프처럼 한번 더 분할이 된다.


그래프를 보면 min_sample_split 값이 작을 때는 train과 test 성능의 차이가 크지만 점차 줄어드는 모습을 보인다. 하지만, 매개변수 값이 너무 커지면 train, test, 둘 다 성능이 떨어지게 되므로 주의해야 한다.

 


세 번째는 max_leaf_nodes로, 최대 잎의 개수를 정해준다. 아래 사진은 max_leaf_nodes를 2로 설정한 것이다.

그래프를 보면, 이 값이 너무 작으면 과소 적합의 가능성이, 값이 너무 크면 과적합의 가능성이 있으므로, 적당한 값을 찾아야 함을 알 수 있다. Default 값은 None이다.

 

 

네 번째는 min_samples_leaf이다. min_samples_leaf는 리프 노드가 되기 위해 필요한 최소한의 샘플 데이터 수를 뜻한다.
min_sample_leaf를 5로 설정했을 때, 아래 왼쪽 그림은 빨간 박스 안에 샘플 데이터 수가 3 임으로 조건에 맞지 않기 때문에 아래 오른쪽 그림과 같은 결과를 얻으며, 이는 트리의 성장을 제어하게 된다.


그래프를 보면, 매개변수 값이 100보다 작을 때는 과적합이 일어나다가, 100~400 사이일 때는 과적합이 괜찮아짐을 볼 수 있다. 그러다 500 이상쯤이 되면 train과 test 모두 성능이 떨어짐을 볼 수 있다. Default 값은 1이다.

 

 

다섯 번째는 n_estimators이다. n_estimators는 랜덤 포레스트 모델에서 설정할 추정치 수다. Default 값은 100이고, 보통 많은 수를 사용할수록 모델의 성능이 좋아질 것이라 예상하지만, 무조건 많이 설정하는 게 좋은 것이 아니다.

많은 수의 트리를 사용하면 random forest 모델의 시간 복잡성 또한 증가하기 때문이다. 그래프를 보면 모델의 성능이 급격히 증가한 후 특정 수준에서 정체됨을 볼 수 있다.


여섯 번째는 max_samples이다. max_samples는 전체 데이터 세트의 얼마 정도를 제공할지 설정하는 값이다. 아래 그래프를 보면 원래 데이터 세트의 0.2 정도 사용했을 때 모델 성능이 최대에 도달하는 것을 볼 수 있다. 이 비율은 데이터 세트마다 다르고, Default 값은 1이다.

 


마지막으로 max_features이다. 각 트리에 제공되는 최대 기능 수를 뜻하는 값으로, 수가 증가할수록 모델의 성능이 초기에 증가함을 볼 수 있다. 특정 시점 이후 train은 증가하지만 test는 포화하다가 갈수록 감소하기 시작한다. 
보통 이 값들은 분류에서는 변수의 수의 제곱근이 이상적인 값, 회귀에서는 변수의 수 /3을 한 값이 이상적인 값이라고 한다.

 

 

728x90