[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] GradientBoosting

inu 2020. 8. 19. 21:21
반응형

Boosting

  • 하나의 앙상블에 포함된 여러 개의 분류기가 순차적으로 학습을 수행하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서 올바르게 예측할 수 있도록 다음 분류기에게 가중치(weight)를 부여하면서 학습과 예측을 진행
  • 주로 분류기에 약한 학습기를 사용 (약한 학습기 : 예측 성능이 상대적으로 떨어지는 학습 알고리즘, 대표적으로 결정트리)

GradientBoosting

  • 여러 개의 결정 트리를 묶어 부스팅하는 앙상블 기법
  • 회귀와 분류 모두에 사용 가능
  • 랜덤하게 트리를 생성한 랜덤 포레스트와는 달리 그래디언트 부스팅은 이전 트리의 오차를 보완하는 방식으로 순차적으로 트리를 만듬 (무작위성이 없음)
  • 보통 다섯 개 이하 깊이의 트리를 사용하므로 메모리를 적게 사용하고 예측도 빠르다.
  • 각각의 트리는 데이터의 일부에 대해서만 맞춰져있어 트리가 많이 추가될수록 성능이 좋아짐
  • 단점 : 매개변수를 잘 조정해야하며, 훈련시간이 길다. 트리의 특성상 고차원 희소 데이터에 대해서는 정상적 작동이 어렵다.
  • learning_rate : 이전 트리의 오차를 얼마나 강하게 보정할 것인지를 제어 (학습률이 크면 트리는 보정을 강하게 하기 때문에 복잡한 모델을 만듬)
  • n_estimators 값을 키우면 앙상블에 트리가 더 많이 추가되어 모델의 복잡도가 커지고 훈련 세트에서의 오차를 더 잘 바로잡을 수 있음

GradientBoostingClassifier()

  • n_estimators : 생성할 트리의 개수 (트리가 많아질 수록 과대적합 가능성 증가)

  • learning_rate : 오차를 보정하는 정도 (값이 높을 수록 오차를 많이 보정하려고 함 )

  • max_depth : 트리의 최대 깊이 (일반적으로 트리의 깊이를 깊게 설정하지 않음)


사용예제

from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_breast_cancer

# 데이터 로드
cancer = load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(cancer.data, 
                                                    cancer.target, 
                                                    random_state=66)
  • 유방암 데이터를 불러온다.
# 모델 학습
model = GradientBoostingClassifier(random_state=42)
model.fit(X_train, y_train)

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

# 특성 중요도 시각화
import seaborn as sns
sns.barplot(model.feature_importances_, y=cancer.feature_names)

  • GradientBoostingClassifier를 fit시키고 이를 통해 정확도와 특성 중요도를 파악한다.
반응형