머신러닝 & 딥러닝

[머신 러닝 & 딥러닝] 랜덤 포레스트 (Random Forest)

beginner-in-coding 2025. 4. 22. 11:25

01. 랜덤 포레스트 (Random Forest)

  • 앙상블(ensemble): 뛰어난 분류 성능 + 과대적합에 안정적
    • 종류: 배깅(bagging), 부스팅(bosting)
  • 랜덤 포레스트: 결정 트리 기반의 앙상블
    • 아이디어: 여러 개의 (깊은) 결정 트리를 평균을 내는 것, 즉 개개의 트리는 분산이 높은 문제가 발생하지만 견고한 모델을 만들어 일반화 성능을 높이고 과대 적합의 위험을 줄임
    • 단계 요약
      1. n개의 랜덤 한 부트스트랩(bootstrap) 샘플을 뽑음(훈련 데이터셋에서 중복을 허용하면서 랜덤 하게 n개의 샘플을 선택)
      2. 부트스트랩 샘플에서 결정 트리를 학습, 각 노드에서 다음과 같이 진행
        • 중복을 허용하지 않고 랜덤하게 d개의 특성을 선택
        • 정보 이득과 같은 목적 함수를 기준으로 최선의 분할을 만드는 특성을 사용해서 노드를 분할
      3. 단계 1, 2를 반복
      4. 각 트리의 예측을 모아 다수결 투표(matority voting)로 클래스 레이블을 할당
    • 결정 트리와의 차이점
      • 결정 트리: 훈련할 때 각 노드에서 최선의 분할을 찾기 위해 모든 특성을 평가
      • 랜덤 포레스트: 랜덤하게 선택된 일부 특성만 사용
  • 장점
    • 하이퍼파라미터 튜닝에 많은 노력을 들이지 않아도 됨
    • 일반적으로 랜덤포래스트는 가지치기를 통한 과대 적합을 조정할 필요가 없음
      • 앙상블 모델이 개별 결정 트리가 만드는 잡음으로부터 매우 안정되어 있기 때문
  • 신경 써야 하는 부분: 랜덤 포레스트가 만들 트리 개수(즉, 단계 3)
    • 일반적으로 트리 개수가 많아짐 → 계산 비용이 증가함 → 랜덤 포레스트 분류기의 성능이 좋아짐
  • 최적화 하이퍼파라미터
    • 부트스트랩 샘플의 크기 n(단계 1) : 랜덤 포레스트의 편향-분산 트레이드오프를 조절 가능
      • n 크기가 감소: 개별 트리의 다양성 증가, 즉 랜덤포래스트의 무작위성이 증가하고 과대 적합의 영향이 적어짐, 훈련 성능과 테스트 성능 사이의 격차가 작아지지만 전체적인 테스트 성능이 감소
      • n 크기가 증가: 과대 적합의 가능성이 증가, 부트스트랩 샘플과 결정트리가 서로 비슷해지면서 원본 훈련 데이터셋에 더 가깝게 학습되므로 전체적인 테스트 성능이 증가
    • 각 분할에서 무작위로 선택할 특성 개수 d(단계 2)
    • 대부분의 라이브러리
      • 부트스트랩의 크기 == 원본 훈련 데이터셋의 샘플 개수: 균형 잡힌 편향-분산 트레이드오프를 얻기 위해
      • 분할에 사용할 특성 개수 d <= 훈련 데이터셋에 있는 전체 특성 개수
  • 사이킷런 의 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): 다음 차례에 남은 숫자에서 특정 숫자를 뽑을 확률은 이전에 뽑은 숫자에 따라 달라짐