우리아이 영양 간식

공개된 블로그지만, 아무도 보지 않았으면 하는 블로그

카테고리 없음

04-5: Ensemble - AdaBoost (앙상블 기법 - 에이다부스트)

iam_sw_ 2021. 8. 8. 18:57

자료 출처 : https://www.youtube.com/watch?v=HZg8_wZPZGU d

KoreaUniv DSBA

 

= 유튜브 내용이 너무 유익하다. ( ...친구가 해당 랩실 멤버로 있네? )

==============================================

배깅 vs 부스팅

 

팀 A : a , b , c , d , e

시사상식 책을 5권을 삼.

A - 1번 책

B - 2번 책

...

E - 5번 책

서로 다른 책을 공부

퀴즈쇼에 나가서 각각 공부한 내용을 바탕으로, 5명의 답 가운데 대표 값 하나를 답으로 제출. 

= Bagging

 

 

팀 B : ㄱ , ㄴ , ㄷ , ㄹ , ㅁ

우선 

ㄱ - 문제집 1권을 풀게 시킴 - 틀린 유

ㄴ - 앞 사람이 잘 못푸는 유형이 많은 책을 풀게 시킴

ㄷ - 앞 사람이 잘 못푸는 유형이 많은 책을 풀게 시킴

...

ㅁ - 앞 사람이 잘 못푸는 유형이 많은 책을 풀게 시킴

= 부스팅

 

병렬 연산

 

배깅 - 동시 다발적 - 병렬 가능

ㄴ 그런데 의외로 배깅이 학습 속도가 느린 경우가 많음

ㄴ 하나의 학습 모델의 복잡도가 높아서 느림.

부스팅 - 앞선 모형이 얼마만큼 잘하는지 못하는지 평가 뒤에 다음 모형 학습 가능하기 때문에 - 병렬 불가능

ㄴ 한번 스플릿 하는데, 시간이 짧게 걸림.

 

개별적 모델을 순차적으로 학습시킬건데,

 

각 턴 마지막에는 "분류 관점에서( 회귀에선 회귀 오차가 큰 것 ), 오분류된 example에 대해서 새로운 train dataset에서 더 많이 나올 수 있도록(?) 가중치 조절. -> 앞선 모델에 의해서 나타난 큰 에러는, 이어서 학습된 모델이 줄이기 위한 데이터셋을 학습 -> 에러가 줄어듦 )

데이터를 통해서 모델을 만들고 -> 두번째 데이터를 만들고 // -> 다시 모델을 만들고 -> 세번째 데이터를 만들고 ...

이런 식으로 최종적으로 각 순서에 대한 모델의 결과물을 다 더함.

인풋

1. 앙상블 사이즈 T : 몇개의 러너를 쓸 것인가? 50개~100개

2. 2범주 분류 케이스로 한정하겠음. 2범주에선 레이블을 -1 , +1 로 하겠음. AdaBoost에선 이렇게 함.

( 단지 알고리즘 진행을 위해 임의로 분류 )

 

1. D_1 : 각 첫번째 데이터셋의 example i 가 선택될 확률.

처음에는 모델이 어떤 데이터에 대해서 좋고 나쁜지 모르기 때문에 모든 데이터에 대해서 동등하게 선택될 확률을 제공 (uniform distribution)

 

반복문 시작

1. h_t 는 우리가 알고 있는 모델. ( stump tree - 어떤 데이터가 영역이 있을때 딱 1번만 그어서 모델을 분류하는 트리 - 굉장히 weak model )

2. 이 h_t를 D_t에 대해서 학습시키겠다. 

3.  h_t의 D_t에 대한 오분류율을 계산 ( 정답과 추정값이 다른 경우에 대한 비율 )

- 최소한 이 오분류율이 50% 를 넘는다면 ( 최소한 랜덤으로 찍는 0.5 보다 작아야 학습하는 의미 존재 ) break 하고 다시 데이터셋으로 모델을 학습

4. 그리고나서 @(알파)_t 를 구함. @_t 는 가중치의 역할. 

- @_t ( 에러율이 0.5에 가까우면 (1/2) * ln( (1-error_t ) / ( error_t ) ) 라는 식에서 ln 에서 1이 나와서 0이 됨. - 신뢰할 수 없는 모델이라 가중치가 0에 가까움, 만약 에러율이 0이라면, (1/2) * ln( (1-error_t ) / ( error_t ) ) 에서 무한대에 가까움. - 정확도가 높을수록 나중 결합시 가중치가 높아진다. )

 

(가장 핵심)

D_t+1 데이터셋에 대한 가중치를 업데이트 해줌.

논문에서의 공식 : D_t+1 = D_t * exp[ ( -1 * @_t * y_i * h_t ) / ( Z_t )

- 여기서 Z_t 는 normalize factor 인데 우선은 무시하고

- D_t : t 시점의 선택 확률이 기준점이라는 뜻.

 

- exp 안의 수식에 대해서 자세히 살펴보면

-- -1 * @_t : 알파 값이 크면 클수록 모델이 정확하다는 뜻이었음. 모델이 정확한 녀석에 대해선 증폭을 시키곘다. = h_t가 정확하면 Sampling rate 의 변동성을 증가시키겠다. 다시말해서 h_t 가 잘 맞추고 있으면 -1 이 앞에 붙어 있어서 급격하게 선택 확률을 줄여버릴 것이고,  h_t 가 정확한 모델인데 틀렸으면 다음 단계에서 선택될 확률을 높이겠다. 

 

-- y_i * h_t :

--- y_i = h_t 이면 값이 1로 나옴. ( y_t , h_t 는 각각 -1 또는 1인데, 둘 다 값이 같을때만 +1이 나옴 - 이것 때문에 예측 라벨이 -1 또는 1 인 것임 )

--- y_i != h_t 이면 값이 -1로 나옴. 

 

h_t 가 y_i의 정답을 맞췄다 -> 모델이 잘 맞추고 있으면, exp 안의 값이 - 값을 가짐. -> 다음 데이터셋 선택시 i example 이 선택될 확률은 낮다.

- 여기서 확률의 감소 폭은 @_t 에 비례한다.

 

h_t 가 y_i의 정답을 틀렸다 -> 모델이 잘 맞추고 있으면, exp 안의 값이 + 값을 가짐. -> 다음 데이터셋 선택시 i example 이 선택될 확률은 증가한다.

- 여기서 확률의 증가 폭은 @_t 에 비례한다.

 

제일 마지막에 test dataset에 대해서 모든 개별 모델 출력값을 합해서 값을 리턴함.

 

================

( 설명 정리 )

처음 데이터 셋은 random 하게 샘플링 하는데,

이후 데이터 선택 시, 앞서 학습한 모델이 ( 1. 정답률이 높은가, 2. 샘플 i에 대해서 정답을 맞췄느냐 못맞췄느냐. ) 에 따라서 데이터 선택률에 차이가 난다. 결국 앞선 모델에서 정답을 못맞춘 케이스에서 선택률이 높아지고 더군다나 앞선 모델이 정답률이 높았다면 더더욱 선택률이 높아진다. 

 

D_t+1 = D_t * exp[ (  @_t-1 * y_i * h_t ) / ( Z_t )

1. -1 * y_i * h_t : 앞선 모델의 예측 결과가 정답과 다르다면 exp 안의 값이 + 가 되면서 선택률이 높아진다. 

2. @_t : 앞선 모델이 정답률이 높았다면, 더더욱 선택률이 높아진다.

 

+ 최종적 결과값을 내놓을때 정답률이 높은 모델의 경우 가중치(@_t)가 붙어서 나온다.

@_t = (1/2) * ln( (1-error_t ) / ( error_t ) ) 

================

h_1 : stump tree

앱실론 :

앱_1 : 전체 비율중에 못맞춘 비율(에러율) : 0.3 -> @_1 = (1/2) * ln( (1-앱_1) / ( 앱_1) )  = 0.42

케이스 1 : 정답을 맞췄음 -> exp 내 -1 -> 선택 확률 감소

케이스 2 : 정답을 맞췄음 -> exp 내 -1 -> 선택 확률 감소

케이스 3 : 정답을 틀렸음. -> exp 내 +1 -> 선택 확률 증가 ( 그림 내의 + , - 크기 변화 주목 )

배깅과 마찬가지로 복원 추출을 하는데

( 베깅 : 데이터가 있으면, 각 데이터 선택 확률이 1/ n 로 동일함 )

( 부스팅 : 처음엔 1/n 이었으나, 앞선 모델의 정확도, 정답 유무에 따라서, 선택 확률이 달라짐 )

 

라운드 2에서 h_2 모델이 분류를 했을때 파란색 영역내 - 값들이 오분류 되었음.

오분류율 : 0.3 인데 샘플 선택 확률이 다르므로 ( +, - 크기가 다름 ) 여기선 0.21로 나왔다고 치자.

 

이후 D_3 로 넘어갈때

파란색 영역내의 큰 +, 작은 + 들은 정분류되어서, 데이터 선택 확률이 작아져서 다시 정상 크기(?)의 +, 더 작은 +가 되었음. ( 빨간 영역의 - 들도 이후 크기가 작아짐 )

 

그러나 파란 영역 내의 - 들은 오분류되어서 이후 크기가 커짐

이렇게 반복...

3회 반복으로

stump 트리는 특정 축을 기준으로 수직으로 구분하는 단순한 트리임에도

분류 경계면을 만들어내서 +,- 를 완벽히 구분할 수 있었다.

1->2로 갈때 파란색칠 한 놈들 크기가 커짐

2->3으로 갈때, 오분류된 큰 파란원은 더 커졌음

...

최종적으로 복잡한 분류 경계면이 만들어졌다.

전체적 예시. (설명 생략)

sign : 최종적으로 값의 부호를 결정 ?? 아마도 괄호 안 값을 다 더해서 결국 양의 값인지 음의값인지 classify