[파이썬 프로그래밍 18] 머신러닝에서 오버피팅을 피하는 방법
머신러닝에서 오버피팅을 피하는 방법 머신러닝에서 어떻게 어떻게 오버피팅을 피할 수 있을까요? 학습하는 데이터가 충분히 많으면 피할 수 있습니다. 이전 글에서는 학습에 사용한 데이터 갯수가 10개에 불과했습니다. 그런 데이터를 복잡한 곡선으로 표현하다보니 데이터에 있는 잡음까지 정확하게 곡선으로 표현하려하다보닌 생긴 현상입니다. 이번에는 이보다 훨씬 많은 100개의 데이터 가지고 학습해보겠습니다. 곡선은 10개의 데이터로 학습을 했을때 오버피팅이 생겼던, 입력데이터의 9제곱까지 포함하는 수식으로 하겠습니다. $$ y=a_0+a_1x+a_2x^2+\dotsb+a_9x^9 $$ 100개의 데이터를 가지고 하는 학습을 통해, 데이터를 가장 잘 표현하는 곡선 수식의 $a_0, a_1, \dotsb, a_9$ 값을 찾는 겁니다. 데이터의 갯수(좀 더 정확하게는 입력 데이터의 갯수)가 곡선을 나타내는 $a_k$의 갯수보다 10배 많은 경우입니다. 코드는 지난번 코드와 거의 같습니다. 처음에 100개의 가상 데이터를 만드는 과정만 추가했습니다. import random datalen = 100 random.seed(1) x = [random.random()*10.0 for k in range(datalen)] y = [x[k]**2-10.0*x[k]+30+random.gauss(0.0, 1.0) for k in range(datalen)] Data =…