티스토리 뷰
부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습하고 예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선합니다. 부스팅의 대표적인 구현으로 AdaBoost(Adaptive boosting)과 그라디언트 부스트가 있습니다.
에이다 부스트는 오류 데이터에 가중치를 부여하면서 부스팅을 수행합니다. 에이다 부스트의 동작 방식을 알아봅시다.
+와 -로 마킹된 피처 데이터 세트가 있다고 합시다. Step 1에서, 첫 번째 학습기가 분류 기준1로 +와 -를 분류합니다. 동그라미로 표시된 데이터는 잘못 분류한 데이터입니다. Step 2에서 잘못 분류한 데이터에 대해 가중치를 부여합니다. Step 3에서 두 번째 학습기가 분류 기준2로 +와 -를 분류합니다. Step 4에서 두 번째 학습기가 잘못 분류한 데이터에 가중치가 부여됩니다. 이런 식으로 학습이 진행되며, 최종적으로는 분류 기준 1, 2, 3에 가중치를 부여한 후 결합하여 예측을 수행합니다.
GBM(Gradient Boost Machine)도 에이다부스트와 유사하나, 가중치 업데이트에 경사 하강법을 쓰는 것이 차이입니다. 오류값은 (실제 값) - (예측 값)이므로, 분류의 레이블을 y, 각 피처를 x1, x2, ... , xn라고 한다면 피처에 기반한 모델을 F(x)로 표현할 수 있습니다. 오류식 h(x) = y - F(x)이 됩니다. 해당 식을 최소화하는 방향성을 기반으로 반복적인 가중치 업데이트를 수행하는 것이 경사 하강법(Gradient Descent)입니다.
GBM은 분류와 회귀 모두 수행할 수 있습니다. 사이킷런은 GBM 분류를 위해 GradientBoostingClassifier 클래스를 제공합니다. 해당 클래스로 사용자 행동 데이트 예측 분류를 수행해봅시다.
디폴트 하이퍼 파라미터만으로 약 93.8%의 예측 정확도로 앞의 랜덤 포레스트보다 나은 예측 성능을 나타냈습니다. 일반적으로 GBM이 랜덤 포레스트보다 더 뛰어난 예측 성능을 보입니다. 그러나 수행시간이 997초로 매우 오래 걸렸습니다. 사이킷런의 GBM 클래스는 학습기의 순차적인 예측 오류 보정을 통해 학습을 수행하므로 멀티 CPU 코어 시스템을 사용하더라도 병렬 처리가 지원되지 않습니다. 이처럼 수행 시간 문제는 GBM이 극복해야 할 핵심적인 과제입니다.
GBM 클래스의 특징적인 파라미터는 다음과 같습니다
- loss : 경사 하강법에서 사용할 비용 함수를 지정합니다. 특별한 이유가 없다면 디폴트인 'deviance'로 사용합니다.
- learning_rate : 학습률입니다. 0 ~ 1사이의 값을 지정할 수 있으며, 디폴트는 0.1입니다. 작은 값을 적용할수록 최소 오류값을 찾아 예측 성능이 높아질 가능성이 있지만, 수행 시간이 오래걸리며 모든 반복이 완료돼도 최소 오류값을 찾지 못할 수 있습니다. 너무 큰 값으로 설정한다면 최소 오류값을 그냥 지나쳐 버릴 수 있지만 수행 시간이 상대적으로 짧습니다. n_estimators 파라미터와 상호 보완적으로 조합해 사용합니다. learning_rate를 작게하고 n_estimators를 크게 하면 더 이상 성능이 좋아지지 않는 한계점까지 예측 성능이 향상될 수 있습니다.
- subsmaple : 학습기가 학습에 사용하는 데이터의 샘플링 비율입니다. 디폴트는 1이며, 전체 학습 데이터를 학습한다는 뜻입니다. 과적합이 염려되는 경우 1보다 작은 값으로 설정합니다.
GridSearchCV() 메서드로 GBM의 하이퍼 파라미터를 튜닝하는 데에는 너무 많은 시간이 소요되므로 넘어가겠습니다. GBM은 과적합에도 강한 뛰어난 알고리즘이지만 긴 수행 시간이라는 치명적인 단점을 가집니다.
'파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글
파이썬 머신러닝 완벽 가이드 : LightGBM (0) | 2023.05.03 |
---|---|
파이썬 머신러닝 완벽 가이드 : XGBoost(eXtra Gradient Boost) (0) | 2023.05.03 |
파이썬 머신러닝 완벽 가이드 : 앙상블 학습 (0) | 2023.05.02 |
파이썬 머신러닝 완벽 가이드 : 결정 트리 실습 - 사용자 행동 인식 데이터 세트 (1) | 2023.05.01 |
파이썬 머신러닝 완벽 가이드 : 분류(Classfication)와 결정 트리 (0) | 2023.05.01 |