인공지능/머신러닝

[머신러닝] 앙상블 - 에이다부스트 (AdaBoost)

노트북 산 김에 공부 2023. 9. 27. 15:49

앙승블 학습을 읽고 와주세요 

해당 내용에 나오는 사진과 내용은 meanxai - 에이다부스트[1/4] (Adaptive Boosting: AdaBoost) - 기본 알고리즘 에서 사용했습니다.

 

부스팅은 개별 트리의 실수(오차)를 통해 학습합니다.

이전 트리의 오차를 기반으로 새로운 트리를 훈련하는 것이 기본적인 아이디어입니다.

(각각의 트리가 독립된 연산을 수행하는 '배깅'과 다르다는 것을 알 수 있습니다)

그 예로 에이다부스트가 있습니다. 에이다부스트는 전형적인 부스팅 학습의 일종으로써

오류 샘플의 가중치를 높여 잘못된 예측에 더 많은 주의를 기울입니다.


에이다부스트의 학습 과정 

- 균등분포로 학습 데이터를 샘플링해서 weak learner (약한 모델)로 학습 후, error (추정오차)를 측정합니다.

- 다음 데이터를 샘플링 할 때 사용될 weights (가중치)를 업데이트 합니다.

  (잘못 추정한 데이터의 weight를 크게 만들어서 다음 학습 시에는 잘못 추정한 데이터에 더 집중합니다.)

 

샘플링

 

우선 row 방향으로 균등분포 sub data를 만드는데, target 값은 +1 또는 -1로 설정합니다. (이유는 밑에 서술)

sub data에 포함하는 가중치는 데이터의 크기(m) 중에 1개일 확률을 첫번째로 가중치(D)로 지정합니다

이를 첫번째 weak learner(h)에 학습시키고 추정과 동시에 가중치 업데이트를 진행합니다..

(weak learner로 결정트리를 사용하면 깊이를 1 또는 2로 설정합니다)

 

가중치 구하기

 

데이터(X)를 모델(h)에 대입하여 추정값(y^)를 구하는데

추정값은 -1이거나 +1 입니다 (즉 y^은 -1 또는 +1입니다)

이때 실제데이터와 추정 데이터가 다를때 (y ≠ y^) 지시 함수 (Indicator Function)를 사용합니다.

# 지시 함수란 특정 집합에 특정 값이 속하는지를 표시하는 함수로, 
# 특정 값이 집합에 속한다면 1, 속하지 않는다면 0의 값을 가집니다.

# AdaBoost의 손실값을 구하는 예시를 들자면
# y가 [1, -1, 1]이고 y^이 [1, -1, -1]이라 하겠습니다 (세번째는 잘못 추정했죠)
# 이 때 y의 가중치는 [1/3] 입니다. (맨 처음 가중치 예시 1/m)

y, y_pred = [1,-1,1], [1,-1,-1]
d = 0.3

# 지시 함수는 y의 0, 1번째는 제대로 예측해서 0 이지만 2번째는 틀렸기에 1이 됩니다
i = [0, 0, 1]

# 이를 가중치(d)와 각각 곱하고 더하면 에러(ε)는 1/3이 됩니다.
# (0 * 0.3) + (0 * 0.3) + (1 * 0.3)  
error = 0.3

# 이 과정을 모든 데이터(m)에 적용시켜 각각 error를 더합니다.

위와 같이 각각 데이터의 error(ε)를 더하면 약한 모델의 손실률을 구할 수 있습니다.

이제 여기서 error를 통해 α를 구하면 다음 모델이 사용할 가중치를 계산할 수 있게 됩니다.

α  구하기

error(ε)값은 0.5보다는 작야아 합니다. 

error값이 커지면 α값이 작아집니다. 

다음 데이터 가중치 구하기

이렇게 구해진 α에 -부호를 넣어 y와 y^을 곱하게 됩니다.

(여기서 아까 target 값을 +1 또는 -1로 설정한 이유가 나옵니다)

 

만일 y가 1, y^이 1이라면 -α가 곱해지기에 가중치는 -가 됩니다 (학습에 영향이 적게 듭니다)                                                

반대로 y가 1, y^이 -1이라면 -α가 곱해져서 가중치는 +가 됩니다 (학습에 영향이 많이 듭니다)

즉, 잘못 예측하는 데이터에 가중치를 높여서 다음 데이터가 해당 데이터에 신경을 많이 쓰게 합니다.

 

추정

 

추정과정에는 테스트 데이터를 사용하여 각 모델이(모델 총 수 =T) 출력한 추정치(h1)와 각 모델의 α값을  곱해줍니다.

그 다음 sign 함수를 사용해 위 계산 값이 양수이면 +1 음수이면 -1로 변환해줍니다.

이 때 error(ε)가 컷던 h의 출력은 신뢰하기 어려우므로 작은 α가 곱해집니다. ( ε와 α의 반비례 관계)


전체 알고리즘 요약(출처 : Yoay Freund let aI., 1999, A Short Introduction to Boosting.)