본문 바로가기
빅데이터분석

[머신러닝] 메타코드 강의 후기_머신러닝 입문 부트캠프 (6) 편향과 분산의 Trade-off를 해결하는 방법

by 모닥불🔥 2024. 10. 27.

 

🔥 메타코드에서 머신러닝 입문 부트캠프 강의를 듣고 있다. 머신러닝 강의에서 그냥 무지성으로 돌렸던 코드에 대해 깊이 이해하고, 내 손으로 최적의 파라미터를 뽑아내고, 하이퍼파라미터 튜닝도 해보고 싶다. 이번에는 지난 글에서 배웠던, 분산과 편향 사이의 trade-off를 해결할 수 있는 방법을 몇 가지 배운다. 현업에서도 활용할 부분이 있으니 잘 정리해 두어야지!


4. 편향(Bias)과 분산(Variance) - 어떻게 Trade-off 문제를 해결할 수 있을까?

지난 글에서, 분산은 과적합(over-fitting)과, 편향은 과소적합(under-fitting)과 관련이 있다고 배웠다.

일반적으로는 분산과 편향이 trade-off 관계라 배웠으나, 항상 그런 것은 아니다.

그래도... 일반적으로 이들의 trade-off를 적당히 조절하는 게 중요하긴 하겠지..? 머신러닝에서..!

분산과 편향의 trade-off 관계를 어떻게 해결할 수 있을까?

해결 방법은 일반적으로 모델의 복잡도를 키우고, 과적합을 막는 방식으로 이루어진다.

지난 시간에 모델의 복잡도가 커지면 분산이 커지고 과적합이 될 수 있다고 배웠는데, 여기에서 과적합을 막기 위한 방법을 적용시키면 모델의 복잡도가 적당히 크고, 과적합은 잡아주는 그런 이상적인 모델이 되는 것...!

방법은 크게 3가지가 있다.

1) 검증 데이터셋(validation data)을 이용하는 것

2) k-폴드 교차검증

3) 정규화 손실 함수

 

 

검증 데이터셋 개념은 그리 어렵지 않다. 원래는 학습 데이터 80%, 평가 데이터 20%로 나눴다면, 이번엔 그 사이에 검증 데이터를 끼워 넣어서, 학습 80%, 검증 10%, 평가 10% 이런 식으로 구성하는 것을 말한다.

검증 데이터와 평가 데이터 모두 학습에 사용하지 않는다는 공통점이 있다.

둘의 차이는, 검증 데이터는 학습 결과를 중간 평가해서 최적의 파라미터를 찾는 데 사용하는 것이고 평가 데이터는 완전히 학습을 종료한 후 머신의 성능을 평가하는 것이라는 점이다.

 

약간.... 열심히 공부한 다음(train), 모의고사 치고(valid) 오답노트 한 다음에, 실제 수능(test)을 보는 느낌이랄까...?

 

다음으로는, LOOCV 방식이 있다. 검증 데이터셋을 랜덤으로 10% 뽑아도, 검증을 딱 한 번만 하기 때문에 그 결과 자체에 편향이 있을 수 있다. 당연히...! 그리고 검증에 사용한 데이터는 학습에 쓸 수 없다는 아까운 상황이 발생한다.

그래서, 검증 데이터를 딱 하나만 남기고 나머지는 다 학습에 사용한 다음, 이를 데이터 수인 n번 반복하는 것을 LOOCV 방식이라고 한다.

 

단순히 N번이라 하면, 그렇구나... 하겠지만 3만 개의 행을 가진 데이터 셋이 있다면 30,000번 학습을 시켜야 하므로 계산비용이 어마어마하게 클 것이다. 이런 단점으로 인해 K-fold 방식이 나오게 되었다.

 

K-fold 교차 검증은 LOOCV의 어마어마한 계산비용 문제를 해결하기 위해 제안된 방법이다.

현실에서도 문제 하나를 해결하려 하면 또 다른 예상치 못한 문제가 발생하는 경우가 있지....! 절충안을 잘 찾아야지.

K-fold는 데이터셋 개수인 N만큼 반복 학습을 시키는 건 너무너무 많으니까, 그냥 좀 크게 K개의 덩어리로만 나누자~ 라고 합의를 본 것이다.

위 그림에서 나오는 예시는 k가 4인 4-fold 교차검증이다. 학습 데이터를 4등분해서, 그 중에 하나를 검증 데이터로 삼고, 또 다른 1/4을 검증 데이터로 하고, 또 다른 1/4, 또 다른 1/4을 검증해서 총 4번 학습과 검증을 거치는 것이다.

5개 모델에 대해 평가하고 싶을 때는 k를 5로 설정하면 된다. N번에 비하면 훨씬 훨씬 현실적이고 합리적인 방법인 것 같다...

 

 

여기에서 K값이 커지면 어떤 일이 벌어질까?

 

K값이 커진다는 것은, 얼마나 작은 등분으로 데이터를 나눌지를 의미한다. k=2이면 검증 데이터는 1/2이지만, k=100이면 검증 데이터는 1/100로 작아진다.

1) 즉, K가 커질수록 검증데이터셋 크기가 작아지고 학습에 사용할 수 있는 데이터 수는 많아진다.

2-1) 학습에 사용되는 데이터가 많은 만큼, 데이터의 전체 패턴을 모델이 이해하기 쉬워지므로 편향 에러는 줄어든다.

2-2) 반면, 모델의 예측 성능이 분할에 따라 엄청 민감하게 바뀔 것이므로 분산 에러는 커진다.

3) K값이 최대한으로 커지면 N과 같아질 것이다. 즉, LOOCV의 단점과 같이, 계산비용이 커진다.


 

원래라면 세 번째 방법인 Regularization(정규화)도 이 글에 같이 정리하면 좋은데, 넘 피곤해서 오늘은 생략... 언젠가 추가 하거나 다음 글에 쓰도록 하겠다. 다음주면 서포터즈 마지막 주다. 31일에 워크숍 가서 월, 화, 수 3일간 모든 일을 끝내야 한다. 휴휴....  그래도 난생 처음 워크숍을 가는 거라 좀 기대가 된다. 마지막까지 서포터즈 마감기한을 바탕으로 동기부여하여... 파이팅...!🔥🔥

 

* 메타코드 서포터즈로서 강의를 제공받아 작성하였습니다. 이미지를 클릭하면 홈페이지로 이동합니다.