머신러닝 모델 소개 (5) - 에이다부스트 (AdaBoost)

Mozen

·

2023. 7. 10. 20:43

반응형

 

머신러닝 모델 소개 시리즈의 다섯 번째 글입니다. 에이다부스트(AdaBoost)는 앙상블(Ensemble) 학습 방법 중 하나로, 약한 학습기(Weak Learner)를 여러 개 결합하여 강력한 분류 모델을 구축하는 방법입니다. 에이다부스트는 이전 모델이 잘못 분류한 샘플에 가중치를 부여하여 다음 모델이 이를 보완하도록 학습합니다. 이번 글에서는 에이다부스트의 기본 개념을 소개하고, 파이썬의 Scikit-learn 라이브러리를 사용하여 실제 데이터에 에이다부스트를 적용하는 방법을 알아보겠습니다.

 

1. 모델 설명

 

    부스팅(Boosting)은 다수의 약한 학습기(weak learner)를 조합하여 모델의 성능을 높이는 앙상블 기법입니다. 약한 학습기는 무작위(random) 추론보다는 정확도가 높으나 학습구조가 충분히 깊지 않아 편향(bias) 발생 가능성이 높습니다. 에이다부스트(adaptive boosting, AdaBoost)는 완전히 성장하지 않은 의사결정나무(decision tree)인 결정 그루터기(decision stump)를 약한 학습기로 하는 분류 및 회귀 알고리즘입니다. 그루터기는 하나의 마디(node)와 그 마디에서 분할된 2개의 잎(leave)으로 구성됩니다.

 

결정 그루터기 구조도

 

    2개의 클래스(class)로 분류하는 분류기(classifier)에 사용되는 데이터는 여러 개의 특성 값으로 이루어진 입력 벡터 X와 -1 또는 +1인 범주형 변수 y가 결합된 형태입니다. 결정 그루터기는 하나의 특성 축에 평행하게 특성공간(feature space)을 분할합니다. 에이다부스트는 이전 단계 그루터기에 의해 잘못 추론된 데이터의 가중치를 높이고, 옳게 추론된 데이터의 가중치를 낮추는 방식으로 순차적으로 그루터기를 만듭니다. 아래 그림은 3개의 그루터기를 순서대로 만든 예시입니다. 첫 번째와 두 번째 분할은 왼쪽 공간을 +1, 오른쪽 공간을 -1으로 추론하는 모델입니다. 세 번째 분할은 위쪽 공간을 +1, 아래쪽 공간을 -1으로 추론하는 모델입니다. 에이다부스트가 학습을 진행할 때 이전 단계에서 추론이 맞은 데이터는 다음 단계 모형에서 크기(중요도)가 작아지고, 추론이 틀린 데이터는 크기(중요도)가 커집니다.

반응형

3개의 그루터기로 데이터를 분할한 예시

 

    에이다부스트는 다른 머신러닝 모델들에 비해 하이퍼파라미터를 많이 수정할 필요가 없어서 사용하기에 쉽다는 장점을 갖고 있다. 또한, 완벽한 증명이 이루어지지는 않았지만 에이다부스트는 쉽게 과적합(overfitting)되지 않는 경향이 있다고 한다. 하지만, 부스팅 기법 기반의 알고리즘인 에이다부스트는 노이즈 데이터와 이상치(outlier)에 극도로 민감하기 때문에 사용 시 각별한 주의가 요구된다. 또한, 에이다부스트는 XGBoost 보다 느린 것으로 밝혀졌다.

 

 

2. Scikit-learn 라이브러리를 활용한 에이다부스트 사용 방법

 

    에이다부스트는 약한 학습기를 연속적으로 학습하여 예측 오류를 줄여나가는 방식으로 작동합니다. 각 모델은 이전 모델의 오류를 보완하기 위해 가중치를 부여받은 데이터를 학습하며, 모든 모델의 예측 결과를 다수결 방식으로 조합하여 최종 예측 결과를 결정합니다. Scikit-learn은 에이다부스트를 구현한 다양한 클래스와 함수를 제공합니다. 에이다부스트를 사용하기 위해 필요한 라이브러리를 임포트합니다.

 

from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

   

    Scikit-learn에는 다양한 내장 데이터세트가 제공되며, 그 중에서 분류 작업에 자주 사용되는' load_iris' 함수를 사용하여 붓꽃(iris) 데이터셋을 로드할 수 있습니다.

 

from sklearn import datasets

# 붓꽃 데이터셋 로드
iris = datasets.load_iris()

# 독립 변수와 종속 변수 분리
X = iris.data
y = iris.target

 

    데이터를 학습용과 테스트용으로 나누는 것이 중요합니다. 'train_test_split' 함수를 사용하여 데이터를 나눌 수 있습니다. 아래 코드에서 'test_size=0.3'이란 테스트 데이터세트를 전체 데이터세트의 30%로 설정한다는 뜻입니다. 또한, 'random_state=55'는 코드의 재현성을 확보하기 위한 설정입니다. 만약 'random_state'가 특정 숫자로 정의되어 있지 않으면, 코드를 실행할 때마다 학습 데이터세트와 테스트 데이터세트의 데이터가 달라집니다. 'random_state'의 숫자는 0 이상의 정수로 아무 숫자를 사용해도 괜찮습니다.

 

# 학습용 데이터와 테스트용 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=55)

 

    에이다부스트 모델을 만들고 학습시키는 작업을 수행합니다. Scikit-learn의 'AdaBoostClassifier' 클래스를 사용하여 모델을 초기화하고 'fit' 메서드를 사용하여 모델을 학습시킵니다.

 

# 에이다부스트 모델 초기화
model = AdaBoostClassifier()

# 모델 학습
model.fit(X_train, y_train)

 

    모델 학습이 완료되면, 테스트 데이터를 사용하여 예측을 수행하고 모델의 성능을 평가할 수 있습니다.

 

# 테스트 데이터 예측
y_pred = model.predict(X_test)

# 정확도 계산
accuracy = accuracy_score(y_test, y_pred)

print("Accuracy:", accuracy)

 

    위 코드에서는 'AdaBoostClassifier' 클래스를 사용하여 에이다부스트 모델을 초기화하고, 'fit' 메서드를 사용하여 모델을 학습시킵니다. 학습이 완료된 모델을 사용하여 테스트 데이터를 예측하고, 'accuracy_score' 함수를 사용하여 예측 결과의 정확도를 계산합니다.

    이 예시에서는 Scikit-learn에 내장된 붓꽃 데이터세트를 사용하여 에이다부스트 모델을 학습하고 예측하는 방법을 보여주었습니다. Scikit-learn의 에이다부스트 클래스와 관련 함수를 사용하면 간편하게 에이다부스트 모델을 구축하고 데이터를 분석할 수 있습니다. 이를 통해 데이터 분류 작업에 에이다부스트를 적용하여 다양한 문제를 해결할 수 있습니다.

 

머신러닝 모델 소개 시리즈

2023.07.04 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (1) - 선형 회귀 모델 (Linear Regression)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (2) - 서포트벡터머신 (Support Vector Machine, SVM)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (3) - KNN (K-Nearest Neighbor)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (4) - 랜덤 포레스트 (Random Forest)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (5) - 에이다부스트 (AdaBoost)

2023.07.11 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (6) - 다층 퍼셉트론 (Multilayer Perceptron)

반응형