일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- overfitting
- MySQL
- deep learning
- 주피터노트북
- Linear Regression
- 주피터 노트북 테마
- Udacity
- deeplearning
- 한빛미디어
- pandas
- 주피터노트북 커널 제거
- Python
- 주피터노트북 커널 목록
- lol api
- 주피터노트북 커널 추가
- 나는리뷰어다2021
- feature scaling
- ubuntu
- regression
- 모두를 위한 딥러닝
- Machine Learning
- 경사하강법
- Git
- 회귀분석
- 주피터테마
- 딥러닝
- 데이터분석
- jupytertheme
- GitHub
- random forest
- Today
- Total
유승훈
Random Forest 본문
Udacity의 Machine Learning 강의 중 알고리즘을 스스로 공부하는 파트에서 Random Forest를 공부하다가 Youtube 강의를 기반으로 해서 여러 글들을 보고 정리한 내용입니다.
유튜브 강의 링크
이번 글에서 설명할 Random Forest는 Decision Tree를 기반으로 하는 알고리즘입니다.
Decision Tree는 몇가지 단점을 가지고 있습니다. 그 중 가장 큰 문제가 Overfitting인데, 가지치기를 하더라도 완벽하게 해결되지는 않습니다.
따라서 Decision Tree를 여러개 만들어서 결과를 합치는 앙상블 방식을 활용합니다. 앙상블 모델에도 여러가지 종류가 있는데, Decision Tree를 Base Model로 하는 것이 Random Forest입니다.
Random Forest는 모델 학습 속도가 빠르고, 회귀분석처럼 데이터의 분포에 따른 전제가 없는, 비모수적이라는 특징을 갖습니다.
Random Forest를 간단하게 설명하자면
1. Bootstrap 기법을 활용해서 여러개의 Training Sample을 만듭니다.
2. 각 데이터마다 무작위로 선택된 변수로 Decision Tree를 만듭니다.
3. Tree들의 결과를 종합합니다.
첫번째 핵심은 Bagging입니다. Bootstrap Aggregating의 약자입니다.
Bootstrap은 Sampling 기법으로 여러개의 Training Sample을 만드는 것입니다. Original Dataset과 동일한 크기의 Dataset을 Sampling합니다. 이때 복원추출을 하기 때문에 같은 데이터가 중복되어서 추출될 수 있습니다.
이렇게 만들어진 여러개의 Tree들의 결과를 합치는 것이 Aggregating입니다.
보통 회귀문제를 풀때는 여러개의 Tree가 예측한 값의 평균을 종합으로서 활용하는 것이 일반적이지만, Classification에서는 몇가지 결정방법이 있습니다.
1. Majority Voting
단순하게 Tree가 예측한 Class 중 과반의 Class를 선택하는 것입니다.
2. Weighted Voting - Training Accuracy
절대다수가 아닌 각 Tree들의 Training Accuracy 가중평균을 활용하는 것입니다.
=> 해당 Class로 예측한 Tree들의 Training Accuracy / 모든 Tree의 Training Accuracy의 총합
3. Weighted Voting - Probability
각 클래스일 확률의 가중평균을 활용하는 것입니다.
=> 해당 Class일 확률의 총합 / 총 Tree 수
두번째 핵심은 Random Subspace입니다.
데이터를 분할하여 Tree를 만들 때, 변수를 무작위로 선택합니다. 임의로 일부의 변수를 선택해서 그 변수들 중 가장 분할이 잘 되는 변수를 선택하여 분할하는 과정을 반복합니다.
Random Forest를 구성하는 Decision Tree들도 물론 과적합될 수 있습니다. 하지만 충분히 많은 Tree들로 구성하여 과적합된 Tree의 영향이 적다는 보완점이 있습니다. 또한 그 앞서 얘기했던 Bagging, Random Space가 각 Tree들 간의 상관관계를 감소시키기 때문에 error의 상한선인 error upper bound를 감소시킵니다.
앞서 얘기했듯 Random Forest는 비모수 모델이기 때문에 각 변수들의 개별적인 통계적 유의성을 제공하지 않습니다.
대신 OOB(Out of Bag) 데이터를 활용합니다. OOB데이터란, Bagging에서 샘플링 할때 포함되지 않아서 모델을 만들때 관여되지 않은 데이터를 의미합니다.
1. 이 OOB 데이터로 먼저 OOB error를 계산한다.
2. Importance를 계산하고자 하는 변수의 값을 임의로 뒤섞고, OOB error를 계산한다.
이때 이론적으로는 2번 OOB error가 클 수 밖에 없습니다. 두 error의 차이의 평균을 표준편차로 나눠준 것을 Feature importance 로 사용합니다. 이 차이가 크면 임의의 값보다 변수의 원 값을 넣었을때의 성능이 좋다는 의미가 되므로 중요한 변수라고 할 수 있는 것입니다.
Random Forest의 Hyper Parameter는 여러개가 있는데, 여기서는 크게 두개를 설명하고 있습니다.
1. Random Forest가 만드는 Decision Tree의 개수
이건 정답이 정해져 있는 것은 아닙니다. 100,500개의 비교적 적은 개수의 Tree로도 좋은 결과를 낼때도 있고, 1000,3000개의 많은 Tree가 필요할때도 있습니다. 강의해주신 교수님에 따르면, 일반적으로 2000개 정도의 Tree는 필요하다는 Guide Line을 제시합니다. 절대적인 것은 아니기 때문에 Tuning이 필요하다고 합니다.
2. 노드를 분할할 때 무작위로 선택하는 변수의 수
위에서 설명했듯 Random Forest는 Tree를 만들 때 임의로 변수를 선택해서 그 중 가장 분할이 잘 되는 변수를 선택하여 분할을 진행합니다. 이 또한 절대적인 것은 아니고, Tuning을 통해 최적의 Parameter를 찾아야 할 필요성이 있습니다.
'Machine Learning' 카테고리의 다른 글
AdaBoost (0) | 2020.12.06 |
---|---|
LightGBM? (0) | 2020.11.07 |