01. 랜덤 포레스트 (Random Forest)
- 앙상블(ensemble): 뛰어난 분류 성능 + 과대적합에 안정적
- 종류: 배깅(bagging), 부스팅(bosting)
- 랜덤 포레스트: 결정 트리 기반의 앙상블
- 아이디어: 여러 개의 (깊은) 결정 트리를 평균을 내는 것, 즉 개개의 트리는 분산이 높은 문제가 발생하지만 견고한 모델을 만들어 일반화 성능을 높이고 과대 적합의 위험을 줄임
- 단계 요약
- n개의 랜덤 한 부트스트랩(bootstrap) 샘플을 뽑음(훈련 데이터셋에서 중복을 허용하면서 랜덤 하게 n개의 샘플을 선택)
- 부트스트랩 샘플에서 결정 트리를 학습, 각 노드에서 다음과 같이 진행
- 중복을 허용하지 않고 랜덤하게 d개의 특성을 선택
- 정보 이득과 같은 목적 함수를 기준으로 최선의 분할을 만드는 특성을 사용해서 노드를 분할
- 단계 1, 2를 반복
- 각 트리의 예측을 모아 다수결 투표(matority voting)로 클래스 레이블을 할당
- 결정 트리와의 차이점
- 결정 트리: 훈련할 때 각 노드에서 최선의 분할을 찾기 위해 모든 특성을 평가
- 랜덤 포레스트: 랜덤하게 선택된 일부 특성만 사용
- 장점
- 하이퍼파라미터 튜닝에 많은 노력을 들이지 않아도 됨
- 일반적으로 랜덤포래스트는 가지치기를 통한 과대 적합을 조정할 필요가 없음
- 앙상블 모델이 개별 결정 트리가 만드는 잡음으로부터 매우 안정되어 있기 때문
- 신경 써야 하는 부분: 랜덤 포레스트가 만들 트리 개수(즉, 단계 3)
- 일반적으로 트리 개수가 많아짐 → 계산 비용이 증가함 → 랜덤 포레스트 분류기의 성능이 좋아짐
- 최적화 하이퍼파라미터
- 부트스트랩 샘플의 크기 n(단계 1) : 랜덤 포레스트의 편향-분산 트레이드오프를 조절 가능
- n 크기가 감소: 개별 트리의 다양성 증가, 즉 랜덤포래스트의 무작위성이 증가하고 과대 적합의 영향이 적어짐, 훈련 성능과 테스트 성능 사이의 격차가 작아지지만 전체적인 테스트 성능이 감소
- n 크기가 증가: 과대 적합의 가능성이 증가, 부트스트랩 샘플과 결정트리가 서로 비슷해지면서 원본 훈련 데이터셋에 더 가깝게 학습되므로 전체적인 테스트 성능이 증가
- 각 분할에서 무작위로 선택할 특성 개수 d(단계 2)
- 대부분의 라이브러리
- 부트스트랩의 크기 == 원본 훈련 데이터셋의 샘플 개수: 균형 잡힌 편향-분산 트레이드오프를 얻기 위해
- 분할에 사용할 특성 개수 d <= 훈련 데이터셋에 있는 전체 특성 개수
- 부트스트랩 샘플의 크기 n(단계 1) : 랜덤 포레스트의 편향-분산 트레이드오프를 조절 가능
- 사이킷런 의 RandomForestClassfier에 이미 존재하기 때문에 직접 개별 결정 트리를 만들어 랜덤포레스트 분류기를 구성할 필요 없음
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(criterion='gini', # 노드를 분할하는 불순도 지표를 지니 불순도를 이용
n_estimators=25, # 25개의 결정 트리 이용
random_state=45,
n_jobs=2) # 컴퓨터의 멀티 코어를 이용해서 모델 훈련을 병렬화
forest.fit(X_train, y_train) # 학습 데이터 모델에 학습 시키기
02. 중복을 허용한 샘플링 vs 중복을 허용하지 않은 샘플링
- 중복을 허용한 샘플링(with replacement): 모든 차례에서 특정 숫자를 뽑을 확률은 일정함, 즉 샘플(숫자)이 독립적이고 공분산(covariance)이 0
- 중복을 허용하지 않은 샘플링(without replacement): 다음 차례에 남은 숫자에서 특정 숫자를 뽑을 확률은 이전에 뽑은 숫자에 따라 달라짐
'머신러닝 & 딥러닝' 카테고리의 다른 글
[머신러닝 & 딥러닝] 데이터 전처리 - 좋은 데이터셋 만들기 (1) | 2025.04.22 |
---|---|
[머신러닝 & 딥러닝] 랜덤 포레스트 (RandomForest)의 특성 중요도 사용 (0) | 2025.04.22 |
[머신러닝 & 딥러닝] 결정 트리 (Decision Tree) (0) | 2025.04.22 |
[머신러닝 & 딥러닝] K-Means 튜닝 하이퍼파라미터 (0) | 2025.04.21 |
[머신러닝 & 딥러닝] 딥러닝을 시작하기 전에 (0) | 2025.04.21 |