들어가며
지난번 글에서 사이킷런의 BaggingClassifier에 대하여 알아보았는데
이 클래스는 훈련 샘플에 대한 샘플링뿐만 아니라 특성에 대한 샘플링도 지원한다
특성에 대한 샘플링을 이용한 기법인 랜덤 패치와 랜덤 서브스페이스에 대해 다뤄볼 것이고
지금까지 다뤄본 기법들을 활용한 앙상블 모델인 랜덤 포레스트에 대해 알아볼 것이다
랜덤 패치와 랜덤 서브스페이스
앞서 말했듯이 BaggingClassifier은 특성에 대한 샘플링도 지원한다
이 때 샘플링은 max_features, bootstrap_features 두 매개변수로 조절된다
랜덤 패치 방식은 훈련 샘플과 특성 모두 랜덤하게 샘플링하는 방식을 말한다
모든 훈련 샘플과 특성이 사용되지 않을 수 있으며 일부만 골라져 학습되는 방식이다
반면 랜덤 서브스페이스 방식은 훈련 샘플은 모두 사용되지만 특성은 랜덤하게 샘플링되는 방식이다
훈련 샘플은 모두 쓰이고 특성은 일부만 쓰여 학습된다
bootstrap=False, max_samples=1.0으로 설정하고
max_features 매개변수 값을 1.0보다 작게 설정하여 사용 가능하다
참고로 배깅은 훈련 샘플은 일부만 랜덤하게 쓰이고 특성은 모두 사용되는 방식이다
랜덤 포레스트
랜덤 포레스트는 결정 트리의 앙상블로 이루어지는 알고리즘 모델이다
배깅 + 랜덤 서브스페이스 방식의 구조로 동작한다
우선 중복을 허용한 bootstrap 샘플링으로 각 트리를 서로 다른 데이터로 학습시키는 배깅 방식을 사용하고
각 트리들의 노드를 분할할 때 전체 특성 중에서 최선의 특성을 찾는 대신
랜덤으로 선택한 특성 후보 중 최적의 특성을 찾는 랜덤 서브스페이스 방식으로 작동한다
이렇게하면 무작위성을 더욱 주입하여 트리를 다양하게 만들수있고 분산을 낮추어 성능을 높일 수 있게된다
일반적으로는 BaggingClassifier에 DecisionTreeClassifier을 넣어 사용하기도하지만
사용하기 편리하도록 만들어진 RadomForestClassifier를 사용하기도 한다
from sklearn.ensemble import RandomForestClassifier
rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16,
n_jobs=-1, random_state=42)
rnd_clf.fit(X_train, y_train)
y_pred_rf = rnd_clf.predict(X_test)
RandomForestClassifier를 사용한 모습이다
bag_clf = BaggingClassifier(
DecisionTreeClassifier(max_features="sqrt", max_leaf_nodes=16),
n_estimators=500, n_jobs=-1, random_state=42)
BaggingClassifier 클래스 안에 DecisionTreeClassifier 클래스를 넣어 랜덤 포레스트를 구현한 모습이다
참고로 두 모델의 예측 결과는 동일하다
엑스트라 트리
엑스트라 트리는 랜덤 포레스트에서 랜덤성을 한 단계 더 강하게 넣은 모델로
그 차이는 임곗값을 랜덤으로 설정하는 데에 있다
일반적인 결정 트리는 특성들에 대한 가능한 임곗값을 전부 계산하여 최적의 임곗값을 선택하지만
엑스트라 트리는 랜덤으로 임곗값들을 뽑은 후 그 중에서 최적의 임곗값을 선택하는 방식이다
이 방식은 계산량과 속도 측면에서 훨씬 효율적이고 분산이 줄어들어
만약 데이터가 크고 노이즈가 많은 데이터의 경우 엑스트라 트리가 성능적으로 더 나은 선택이 될 수 있다
마치며
이번 글에서는 훈련 샘플과 특성을 어떤 식으로 샘플링 할 것인가에 따라 구분되는
랜덤 패치, 랜덤 서브스페이스, 랜덤 포레스트 그리고 엑스트라 트리의 개념까지 알아보았다
어떤 상황에서 어떤 방식을 사용할 지는 데이터만 보아서는 확신이 안서므로
교차 검증을 통해 비교하여 적절한 방식을 사용하는 것이 좋을 것 같다
'AI > Machine Learning' 카테고리의 다른 글
| [AI] AdaBoost, 그레이디언트 부스팅(Gradient Boosting) (0) | 2026.04.30 |
|---|---|
| [AI] 스태킹(Stacking) (1) | 2026.04.25 |
| [AI] 앙상블 알고리즘(투표 기반 분류기, 배깅과 페이스팅) (0) | 2026.04.19 |
| [AI] 결정 트리(Decision Tree) (0) | 2026.04.15 |
| [AI] 비선형 서포트 벡터 머신(SVM) 분류 (0) | 2026.04.05 |
