반응형
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시키고 이를 통해 정확도와 특성 중요도를 파악한다.
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
기초 추천시스템 - 컨텐츠기반 필터링 (2) | 2020.08.21 |
---|---|
[scikit-learn 라이브러리] AdaBoostClassifier (Adaptive Boosting) (0) | 2020.08.20 |
Attention 기초 (리뷰 요약하기 예제) (1) | 2020.08.18 |
Seq2Seq 기초 (챗봇 데이터 활용 예제) (2) | 2020.08.14 |
함수형 케라스와 모델 합성(앙상블) (0) | 2020.08.14 |