https://www.kaggle.com/code/dansbecker/random-forests
Random Forests
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
www.kaggle.com
위의 글을 보고 참고하여 작성했습니다.
랜덤 포레스트 (Random Forest)는 앙상블 학습 방법 중 하나로, 여러 개의 결정 트리를 결합하여 예측 성능을 향상하는 방법입니다.
분류 (Classification)와 회귀(Regression) 모두에 사용할 수 있으며, 데이터의 과적합을 줄이는 데 효과적입니다.
주요 개념은 다음과 같습니다.
1. 앙상블 기법 (Ensemble Method)
- 여러 모델을 결합하여 하나의 모델을 만드는 방법입니다.
- 개별 모델의 예측을 결합함으로써, 단일 모델의 단점을 보완하고 예측 성능을 향상합니다.
2. 부트스트랩 샘플링 (Bootstrap Sampling)
- 원본 데이터셋에서 중복을 허용하여 여러 개의 샘플을 추출합니다.
- 각 결정 트리는 샘플링을 통해 학습됩니다.
3. 랜덤성
- 각 결정 트리가 학습할 때, 노드를 분할할 변수들을 랜덤 하게 선택합니다.
- 이를 통해 트리 간의 상관성을 줄이고, 모델의 다양성을 증가시킵니다.
4. 다수결 투표 또는 평균
- 분류 문제에서는 각 트리의 예측 결과를 다수결 투표로 결정합니다.
- 회귀 문제에서는 각 트리의 예측 값을 평균하여 결정합니다.
랜덤 포레스트 알고리즘에는 세 개의 주요 하이퍼파라미터가 있습니다.
훈련 전에 이러한 하이퍼파라미터 값을 설정해야 합니다.
1. 노드 크기
- 각 리프 노드에 포함되어야 하는 최소 샘플 수, 과대적합을 방지하고 트리의 복잡성을 조절합니다.
2. 트리의 수
- 랜덤 포레스트를 구성하는 의사결정 트리의 수, 트리가 많을수록 예측의 안정성과 정확성이 증가할 수 있습니다.
3. 샘플링된 특성의 수
- 각 트리에서 분할에 사용할 무작위로 선택된 특성의 수, 이는 트리 간의 상관관계를 줄이고 모델의 다양성을 증가시킵니다.
알고리즘의 작동 방식은 총 5단계로 구성됩니다.
1. 부트스트랩 샘플링 (Bootstrap Sampling)
- 훈련 데이터셋에서 복원 추출 방식으로 데이터 샘플을 생성하여 각 트리를 훈련합니다.
2. 아웃오브백 (Out-of-Bag, OOB) 샘플
- 부트스트랩 샘플에 포함되지 않은 약 1/3의 데이터를 테스트용으로 사용합니다.
3. 특성 배깅 (Bagging)
- 각 트리에서 무작위로 선택된 특성의 하위 집합을 사용하여 트리 간의 상관관계를 줄이고 다양성을 증가시킵니다.
4. 예측 결정
- 회귀 작업일 경우에는 평균값을, 분류 작업일 경우에는 다수결투표로 최종 클래스를 결정합니다.
5. OOB 샘플 활용
- OOB 샘플을 사용하여 모델의 예측 성능을 교차 검증하고 평가합니다.
랜덤 포레스트 장점
1. 과대적합 리스크 감소
- 의사결정 트리는 개별 의사결정 트리가 훈련 데이터에 과대적합되는 경향이 있지만, 랜덤 포레스트는 다수의 상관관계가 적은 트리가 평균을 내어 전체 분산과 예측 오류를 줄여 과대적합을 방지합니다.
2. 유연성 제공
- 회귀와 분류 작업 모두에서 높은 정확도를 제공합니다.
- 누락된 값 처리 : 특성 배깅 때문에 누락된 값을 처리하는데 효과적이며, 일부 데이터가 누락되더라도 정확성을 유지합니다.
3. 특성의 중요성을 쉽게 결정
- 모델의 정확성이 얼마나 감소하는지를 측정하는 지니 중요도 (Gini importance)와 평균 불순도 감소 (MDI)가 일반적으로 사용됩니다.
- 순열 중요도 (MDA)도 중요한 요소로서, OOB (Out-of-Bag, OOB) 샘플의 특성 값을 무작위로 바꾸어 평균 정확도 감소를 확인합니다.
랜덤 포레스트 단점
1. 시간이 많이 소요되는 프로세스
- 많은 데이터를 처리할 수 있지만, 각각의 개별 의사결정 트리에 대해 데이터를 계산하므로 처리 속도가 느릴 수 있습니다.
2. 더 많은 리소스 필요
- 대규모 데이터 세트를 처리하기 위해 더 많은 저장 공간과 계산 자원이 필요합니다.
3. 복잡성 증가
- 의사결정 트리의 포레스트에 대한 예측을 하는 것보다 하나의 의사결정 트리에 대한 예측을 해석하는 것이 더 쉽습니다.
scikit-learn에서 의사결정 트리를 구축한 방법과 유사하게 Random Forest 모델을 구축합니다.
이번에는 DecisionTreeRegressor 대신 RandomForestRegressor 클래스를 사용합니다.
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
# 랜덤 포레스트 회귀 모델을 생성
forest_model = RandomForestRegressor(random_state=1)
# 훈련 데이터를 사용하여 모델을 훈련
forest_model.fit(train_X, train_y)
# 검증 데이터틀 사용하여 예측값 생성
melb_preds = forest_model.predict(val_X)
# 실제 값과 예측값 간의 평균 절대 오차를 계산하여 출력
print(mean_absolute_error(val_y, melb_preds))
191669.7536453626
'머신러닝(Machine leanring)' 카테고리의 다른 글
(5) 머신러닝(Machine learning)이란? - Underfitting and Overfitting [Hellfer] (4) | 2024.07.20 |
---|---|
(4) 머신러닝(Machine learning)이란? - Model Validation [Hellfer] (0) | 2024.07.19 |
(3) 머신러닝(Machine learning)이란? - Your First Machine Learning Model [Hellfer] (0) | 2024.07.18 |
(2) 머신러닝(Machine learning)이란? - Basic Data Exploration [Hellfer] (0) | 2024.07.17 |
(1) 머신러닝(Machine learning)이란? - How Models Work [Hellfer] (0) | 2024.07.16 |
원-핫 인코딩(One Hot Encoding)이란? - [Hellfer] (0) | 2024.07.05 |