OFMY (Ony for me and you)

[파이썬 라이브러리를 활용한 머신러닝] 그래디언트 부스팅 회귀 트리 본문

머신러닝/책 리뷰

[파이썬 라이브러리를 활용한 머신러닝] 그래디언트 부스팅 회귀 트리

선뭉 2023. 9. 8. 17:08

그래디언트 부스팅 회귀 트리란?  여러개의 결정 트리를 묶어 강력한 모델을 만드는 앙상블 방법 

- 회귀, 분류에 모두 사용 가능

- 이전의 트리의 오차를 보완하는 방식으로 순차적으로 트리 구성

- 무작위성이 없음 -> 사전 가지치기 사용

- 메모리를 적게 사용하고 예측도 빨라 간단한 모델 (약한 학습기)


중요한 매개변수 [하이퍼 파라미터]

  • learning rate(학습률) : 이전 트리의 오차를 얼마나 강하게 보정할 것이지를 제어
    • 학습률이 크면 트리는 강하게 보정 -> 복잡한 모델을 만듬
  • n_estimators: 앙상블에 트리 개수를 결정
    • 값이 크면 모델의 복잡도가 커져 훈련세트에서의 실수를 바로 잡을 기회가 더 많아짐

 

from sklearn.ensemble import GradientBoostingClassifier

X_train, y_train, X_test, y_test = train_test_split(cancer.data, cancer.target, random_state=0)
gbrt = GradientBoostingClassifier(random_state=0)
gbrt.fit(X_train, y_train)

print("훈련 세트 정확도: {:.3f}".format(gbrt.score(X_train, y_train)))
print("테스트 세트 정확도: {:.3f}".format(gbrt.score(X_test, y_test)))

훈련세트의 정확도가 100%가 나올 경우 (과대적합이 된 경우),

트리의 최대 깊이를 줄여 사전 가지치기를 강하게 하거나 학습률을 낮추기 

= 모델의 복잡도를 낮추기

 

복잡하다는 것은 모델이 훈련 데이터 맞춤형으로 학습되었다는 것

 

랜덤포레스트와의 차이점은?

  • 보통 더 안정적인 랜덤포레스트를 먼저 적용하곤 함  - 마지막 성능까지 쥐어짜야 할 때 그래디언트 부스팅을 사용하면 도움이 됨
  • n_estimators가 클수록 좋은 랜덤포레스트와 달리, 그래디언트 부스팅에서 n_estimators를 크게 하면 모델이 복잡해지고 과대적합 될 가능성이 높아짐
    • 일반적으로, n_estimators -> learning_rate 조절
    • 트리의 복잡도를 낮추는 max_depth (또는 max_leag_nodes) 매우 작게 설정하며 트리의 깊이가 5보다 깊어지지 않도록