부스팅 (Boosting)은 성능이 낮은 간단한 학습기 (Weak Learner, 약한 학습기)를 여러 개 결합하여 하나의 강한 학습기 (Strong Learner)를 만드는 기법으로, 여러 개의 모형을 순차적으로 학습하되, 앞에서 학습한 모형이 틀린 예측 데이터에 대해서 그다음 모형이 순차적으로 학습해나가는 방식을 의미한다. 즉, 정확도가 낮더라도 일단 간단한 모형을 만들고, 이전 모형의 약점(예측 오류)은 다음 모형에서 보완하는 과정을 반복하여 최종적으로 이들을 결합해 예측을 수행한다. 부스팅 앙상블은 이전 모형의 약점을 개선해나가는 방식에 따라 다양한 유형이 있으며 그래디언트 부스팅이 가장 많이 활용되는 부스팅 앙상블 모형 중 하나이다.
그래디언트 부스팅
그래디언트 부스팅 (Gradient Boosting)은 이전 모형의 예측 오류를 보완하는 데에 경사하강법 (Gradient Descent)을 이용하는 부스팅 방법이다. 그래디언트 부스팅은 이전 모형을 오류를 손실함수 (Loss Function)로 나타내고 이 손실함수를 최소화하는 방법으로 경사하강법을 사용한다. 그래디언트 부스팅 역시 약한 학습기로서 의사결정나무를 주로 사용하는데, 의사결정나무를 약한 예측기로 사용하는 그래디언트 부스팅을 그래디언트 트리 부스팅 (Gradient Tree Boosting) 또는 그래디언트 부스팅 회귀 트리 (Gradient Boosting Regression Tree, GBRT)라고 한다. 이름은 ‘회귀’이나 수치 예측과 분류 모두에 사용할 수 있다.
그래디언트 부스팅 트리는 보통 가지의 수가 1~5개 정도의 깊지 않은 나무를 사용하기 때문에 메모리를 적게 사용하고 학습과 예측도 빠르다. 그러나, 나무의 개수가 많아지면 과잉적합 될 가능성이 커지기 때문에 적절한 인자 조정이 중요하다. 그래디언트 부스팅 트리는 랜덤 포레스트보다 인자 설정에 조금 더 민감하지만, 잘 조정할 경우 더 높은 예측 정확도를 보이는 것으로 알려져 있다.
그래디언트 부스팅 또한 분류 예측과 수치 예측, 둘 다 적용할 수 있는데 이번 연습에서는 분류 예측을 해보겠다.
1) 변수 지정 및 전처리
#1. 변수 지정(독립변수/종속변수)
X = df[['a', 'b', 'c', 'd', 'e', 'f', 'g']]
Y = df['S']
#2. 데이터 세트 분할(독립변수/종속변수)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
#3. 오버 샘플링
smote = SMOTE(random_state=0)
X_train, Y_train = smote.fit_sample(X_train, Y_train)
2) 모형 학습 및 예측
#1. 모듈 및 함수 불러오기
from sklearn.ensemble import GradientBoostingClassifier
#2. 모형 생성
model=GradientBoostingClassifier(random_state=0, n_estimators=100, max_depth=2, learning_rate=0.1)
#3. 모형 학습 및 예측
model.fit(X_train, Y_train)
Y_pred = model.predict(X_test)
print(‘평가용 데이터 세트에 대한 예측값\n’, Y_pred)
▶1. 그래디언트 부스팅 모형이 구현되어 있는 sklearn.ensemble 모듈의 GradientBoostingClassifier 함수를 임포트한다.
▶ 2. GradientBoostingClassifier( ) 함수의 주요 인자는 다음과 같다.
- n_estimators: 하위 나무의 개수를 지정하는 인자
- learning_rate: 학습률, 즉 이전 나무의 오차를 보정하는 정도
- max_depth: 하위 나무의 깊이, 즉 복잡도를 조정하는 인자로 보통 5 이하로 설정
그래디언트 부스팅 트리는 인자값에 따라 성능과 복잡도가 민감하게 반응하기 때문에 여러 번의 반복 실험을 통해 최적의 인자값을 찾는 것이 필요하다. 이번 실습에서는 깊이가 2인 나무 100개를 생성하고, 학습률을 0.1로 지정했다.
GradientBoostingClassifier( ) 함수에 대한 자세한 설명은 아래 URL에서 확인할 수 있다.
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html
3) 모형 평가
• 정확도 평가
print(‘학습용 데이터 세트 정확도: {:.3f}’.format(model.score(X_train, Y_train)))
print(‘평가용 데이터 세트 정확도: {:.3f}’.format(model.score(X_test, Y_test)))
• 정밀도, 재현율, F1 스코어 평가
print(classification_report(Y_test, Y_pred))
This post was written based on what I read and studied the book below.
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791195511747
댓글