[파이썬 프로그래밍 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 =…
Read More

[파이썬 프로그래밍 17] 곡선으로 예측(regression)하는 머신러닝과 오버피팅(overfitting: 과적합)

파이썬 프로그래밍
곡선으로 예측(regression)하는 머신러닝과 오버피팅(overfitting: 과적합) 아래의 표와 같은 가상의 데이터가 있습니다. $$\begin{array}{cc}x&y\\\hline8.4&17.1\\7.6&11.4\\1.2&19.5\\2.7&12.6\\5.1&4.7\\ 4.0&5.7\\7.8&14.0\\3.0&8.2\\4.8&5.6\\5.8&4.6\end{array} $$ 총 10개의 $x,y$쌍이 있습니다. 이 데이터를 표의 형식과 비슷하게 2차원 목록(목록의 목록)으로 만들려면 아래와 같이 됩니다. $$\left[\begin{array}{c} [8.4, 17.1], \\ [7.6, 11.4],\\ [1.2, 19.5],\\ [2.7, 12.6],\\ [5.1, 4.7],\\ [4.0, 5.7],\\ [7.8, 14.0],\\ [3.0, 8.2],\\ [4.8, 5.6],\\ [5.8, 4.6] \end{array} \right] $$ 좀더 정확하게 파이썬의 2차원 목록 형식으로 다시 쓰면 아래와 같습니다. $$ [[8.4, 17.1], [7.6, 11.4], [1.2, 19.5], [2.7, 12.6], [5.1, 4.7], [4.0, 5.7], [7.8, 14.0], [3.0, 8.2], [4.8, 5.6], [5.8, 4.6]] $$ 파이썬의 scikit learn을 이용해 머신러닝을 할때 많이 사용할 수 있는 데이터의 형식입니다. 이를 파이썬 코드로 옮겨보겠습니다. Data = [[8.4, 17.1], [7.6, 11.4], [1.2, 19.5], [2.7, 12.6], [5.1, 4.7], [4.0, 5.7], [7.8, 14.0], [3.0, 8.2], [4.8, 5.6], [5.8, 4.6]] 이 데이터가 어떤 데이이터인지 그래프로…
Read More

[파이썬 프로그래밍 16] 가상 데이터 만들어 기본 머신러닝 알고리듬 적용하기

파이썬 프로그래밍
가상 데이터 만들어 기본 머신러닝 알고리듬 적용하기 파이썬으로 머신러닝 프로그래밍을 하려면 어떻게 해야 할까요? 일단 머신러닝을 할 데이터가 있어야 하겠습니다. 그런 다음 머신러닝의 어떤 알고리듬을 사용해야할지 결정해야겠습니다. ​ 머신러닝에는 여러 알고리듬이 있습니다. 대부분의 알고리듬은 직접 처음부터 프로그래밍을 할 필요 없습니다. 이미 파이썬에서 쓸 수 있게 프로그래밍이 되어 있고, 이를 모듈이나 패키지로 만들어 놓았습니다. 그러면, 그런 모듈이나 패키지를 어디에서 찾을 수 있을까요? 알고리듬마다 일일히 모듈이나 패키지를 찾아야 할까요? ​ 다행히도 딥러님과 강화학습을 제외한 머신러닝 알고리듬 대부분은 한 패키지안에 모여 있습니다. scikit learn이라는 패키지입니다. 만약에 머신러닝으로 뭔가 하고 싶으면 scikit learn만 설치하고 불러오면 웬만한 건 다 해결할 수 있다는 얘기입니다. 그리고 아나콘다(anaconda)로 파이썬을 설치했으면 scikit learn도 이미 설치되어 있습니다. 따라서 바로 프로그래밍을 하면서 불러오기만 하면 됩니다. ​ 이제 가장 기본적인 머신러닝 알고리듬인 Linear Regression이라는 알고리듬을 적용해 보겠습니다. 그러기 위해 scikit learn페기지안에 있는…
Read More