이제 데이터 공부 안하는 블로그

[파이썬 라이브러리를 활용한 머신러닝] 일반화, 과대적합, 과소적합 본문

머신러닝

[파이썬 라이브러리를 활용한 머신러닝] 일반화, 과대적합, 과소적합

공사노비 2021. 9. 16. 10:54

 

제가 '파이썬 라이브러리를 활용한 머신러닝' 읽고 정리한 내용입니다.

 

Chapter 2 지도학습

지도학습이라는 것은 예를 들어 고양이과 강아지를 구분할 수 있게 컴퓨터(머신러닝 모델)를 훈련시킨다고 할 때, 이 컴퓨터(모델)이 일단 어떻게 생긴게 강아지고 어떻게 생긴게 고양인지 전혀 모를테니까 먼저 고양이랑 강아지 사진을 여러 개 주고 '이렇게 생긴 놈은 고양이다.' 또는 '이렇게 생긴 놈은 강아지다.' 라고 알려주면서 학습하게 하는 방법이다. 여기서 강아지, 고양이 사진을 주는 것은 입력 데이터고, 이렇게 생긴게 강아지고, 이렇게 생긴게 고양이다 하고 알려주는 것은 출력데이터라고 볼 수 있다.

우리의 목표는 이렇게 입력/출력 데이터로 모델을 훈련시켜서 이전에 본적 없는 새로운 고양이 or 강아지 사진을 보고도 모델이 바로 알아맞히게 하는 것이다.

분류와 회귀

지도학습에는 분류와 회귀문제가 있다. 분류 문제는 고양이과 강아지 사진을 구분하는 것처럼 여러 클래스 레이블 중 하나를 예측하는 경우나 예/아니오로 대답할 수 있는 이진분류 문제 같은 것들이 있다. 반면에 회귀문제는 연속적인 숫자를 예측하는 걸 말하는데, 예를 들면 누군가의 교육 배경, 직업, 나이 등으로 연봉을 예측하거나, 땅 면적, 방 갯수, 동네, 연도수 등의 정보를 가지고 집 값을 예측하는 문제 같은 것들이 있다. 출력값에 연속성이 있다면 회귀문제로 볼 수 있다.

일반화, 과대적합, 과소적합

부트캠프 머신러닝 수업을 들으면서 매일 들었던 단어들이다. 우선 일반화는 우리가 컴퓨터(모델)을 잘 훈련시켰다면 모델에게 처음보는 강아지나 고양이 사진을 던져줘도 이건 강아지! 이건 고양이! 하고 척척 구별해낼 수 있을 것이다. 이렇게 모델이 훈련이 잘 되어서 새로운 테스트에서도 좋은 성능을 보이는 것을 일반화(Generalization)라고 하고, 이렇게 일반화가 잘된 모델을 만드는 것이 우리의 궁극적인 목표이다.

반면, 과적합과 과소적합이란 우리가 피해야하는 경우인데, 책에서는 이해를 돕기 위해 이런 예시를 들었다. 고객 샘플 데이터를 분석해서 실제로 구매할 것 같은 고객들에게만 홍보 메일을 보내려고 한다. 데이터를 살펴보니 "50세 이상의 이혼 하지 않고 자녀가 셋 미만인 고객이 요트를 구매했다."라는 결론이 나왔다. 그렇다고 50세 이상의 이혼 하지 않고 자녀가 셋 미만인 고객에게만 홍보 메일을 보낸다면 모든 사람들이 요트를 구매할까? 그렇지 않을 것이다. 우리가 알고 싶은 것은 새로운 고객들이 요트를 구매할 것인가?이다. 이미 요트를 구매한 사람들의 데이터에 100% 정확하게 맞아떨어지는 규칙을 만든다고 해서 새로운 고객들이 100% 요트를 구매할거라는 보장은 없다. 이렇게 훈련데이터(기존에 요트를 구매한 사람들 정보가 있는 데이터)에 너무 잘 맞아떨어지게 모델을 훈련시켜버린 나머지 테스트 데이터(새로운 고객)에는 오히려 정확도가 떨어지게 되는 경우를 말한다. 즉, 과적합은 모델이 훈련세트의 각 샘플에 너무 가깝게 맞춰져서 새로운 데이터에 일반화되기 어려운 상황을 말한다. 반대로 과소적합은 '집이 있는 사람들은 모두 요트를 산다.'라는 가정과 같이 모델이 너무 간단해서 데이터의 다양성을 잡아내지 못하는 경우를 말한다.