티스토리 뷰
SVM(Support Vector Machine), KNN 알고리즘과 같이 단일 분류 알고리즘을 조합해 하나의 예측 모형으로 만드는 지도학습 방법론을 앙상블 모델이라고 합니다. 이번 시간에는 앙상블 모델의 종류인 Bagging 기법과 Boosting 기법에 대해 포스트 하겠습니다.
앙상블 모델은 다수 모형의 분류 및 예측 결과를 종합하여 의사결정하는 방법입니다. 앙상블 모델의 성능은 단일 모델의 성능보다는 높다고 알려져 있지만, 단일 모델이 상호 독립적이어야 하고, 각 분류 모델의 오분류율이 적어도 50%보다는 낮아야 앙상블 모델을 사용할 가치가 있습니다. 이 포스트에서 알아볼 Bagging 기법과 Boosting 기법은 모두 단일 모델을 조합하는 방법 중 데이터를 조절하는 방법입니다. 적절한 표본 추출 방식으로 다수의 Training set을 생성하고 각 Dataset의 분류 모델을 생성하여 조합하는 것입니다.
1. Bagging
Bagging 기법은 Bootstrap 표본 추출 방법을 이용해 각 모델의 다양성으로 높여 조합하는 방법입니다. Bootstrap 표본 추출 방법은 복원 추출 방법으로 주어진 데이터에 대해 사전 설정한 비율에 따라 표본을 뽑고 다시 넣는 방식으로 표본을 추출하는 것입니다.
복원 추출로 뽑힌 데이터셋에 대해 각각의 분류 모델을 생성하여 산출된 결과를 종합해 최종적으로 하나의 결과를 산출하는 것이 Bagging 기법입니다. 산출된 결과를 종합하는 방법은 평균, 최빈값 등 다양합니다.
2. Boosting
Boosting 기법은 여러 개의 학습 모델을 순차적으로 구축, 결합하여 성능을 높이는 기법입니다. 초기에 구축된 학습 모델에서 오분류된 관측치를 후에 구축된 학습 모델에서 보완하면서 성능이 올라가는 과정을 겪습니다. Boosting 기법의 종류에는 Adaboost, GradientBoost 등이 있으면 이 포스트에서는 Adaboost에 대해 자세히 다뤄보겠습니다.
Adaboost은 각 단계에서 새로운 base 학습기를 통해 학습하고 오분류된 관측치에 대한 학습 가중치를 높여 다음 단계에서의 새로운 학습기에서 중점적으로 학습하는 것을 반복하는 기법입니다. 각 관측치에 대해 처음 학습할 때는 같은 가중치를 설정하고, 학습할 때마다 잘못 분류된 관측치에 대해서만 가중치를 갱신시켜 주는 것입니다. 다음 예시를 통해 분류 과정을 알아보겠습니다.
다음 관측치의 가중치는 모두 0.1로 설정되어 있으며 세모 5개, 네모 5개로 구성된 관측치입니다. 처음 구축된 학습 모델이 다음과 같이 분류되었다고 가정하면 10개의 관측치 중 3개의 관측치가 오분류된 것을 알 수 있습니다.
오분류된 세모 관측치 3개의 가중치를 업데이트하는 것이 다음 과정입니다. 기존 가중치였던 0.1과는 달라야 다음으로 구축된 학습 모델에서 오분류된 관측치에 대한 학습을 달리 할 수 있습니다. 가중치에 대한 손실함수와 학습기의 가중치를 통해 오분류된 관측치의 가중치를 구할 수 있습니다.
위 공식을 통해 분류 모델의 가중치를 구하면 0.37(log(1-0.3)/0.3))이 되고 오분류된 관측치의 가중치를 구하면 0.14(0.1e^0.37)가 됩니다. 가중치를 업데이트하는 과정은 가중치의 손실값이 최소가 되는 선(h(x))를 찾을 때까지 반복하는 것입니다. 위의 예시에서 3개의 분류 모델을 학습할 때 오분류된 관측치가 3개씩 나온다고 가정하면 최종적인 분류는 다음과 같이 결정됩니다.
이처럼 AdaBoost는 분류 모델을 단순하게 순차적으로 구축하는 것이 아니라 지난 분류 모델을 보완하면서 최종 분류를 예측하는 기법입니다. 보완하는 방법은 언급하듯이 오분류된 관측치에 대한 가중치를 갱신시키는 것입니다.
'머신러닝' 카테고리의 다른 글
[9] 정규화 모델 (Regularization) (0) | 2024.07.07 |
---|---|
[8] 의사결정나무 (2) | 2024.06.30 |
[6] 주성분 분석(PCA) (0) | 2024.05.17 |
[5] KMeans 알고리즘 (0) | 2024.05.15 |
[4] Support Vector Machine(SVM) (0) | 2024.05.12 |
- #polars #대용량 데이터셋 처리
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- #opencv #이미지 연산 #합성
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- #웹 프로그래밍 #서버 #클라이언트 #http #was
- nlp #토큰화 #nltk #konply
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- #attention #deeplearning
- #tf idf
- #with recursive #입양시각 구하기(2) #mysql
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- #django #mvt 패턴
- # 할인행사 #counter #딕셔너리 #프로그래머스
- 머신러닝 #xgboost #
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- 머신러닝 #project #classification #dacon
- #docker #docker compose
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- #프로그래머스 #안전지대 #시뮬레이션
- #docker #container #docker command
- # 프로그래머스 #연속된 부분수열의 합 #이중 포인터 #누적합
- #seq2seq #encoder #decoder #teacher forcing
- 머신러닝 #lightgbm #goss #ebf
- python #프로그래머스 #겹치는선분의길이
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- 잘라서 배열로 저장하기 #2차원으로 만들기
- #docker #image #build #dockerfile
- # 프로그래머스 # 카펫 # 완전탐색