티스토리 뷰

<Machine Learning에서의 Regression>

  • 지도 학습이란, 학습된 결과를 바탕으로 미래의 무엇을 예측하느냐에 따라 크게 2가지로 구분된다.
  • 1) Regression
    • 1-1) Linear Regression
      • Training Data Set를 이용해서 학습된 결과를 만들고 연속적인 숫자값을 예측하는 것
    • 1-2) Logistic Regression
  • 2) Classification
    • 2-1) binary classification
    • 2-2) multinomial classification

 

 

문제를 단순화시켜서 다음의 데이터를 이용해 보자

  • 공부시간 (x), 시험시간 (t)를 이용해서 데이터를 표현해 보자.

  • 이 데이터를 2차원 평면에 scatter (산점도)를 이용해서 표현해보자.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = { '공부시간(x)' : [1,2,3,4,5,7,8,10,12,13,14,15,18,20,25,28,30],
         '시험점수(t)' : [5,7,20,31,40,44,46,49,60,62,70,80,85,91,92,97,98]}

df = pd.DataFrame(data)

display(df.head())

plt.scatter(df['공부시간(x)'],df['시험점수(t)'])  # 산점도를 구할 수 있어요!
plt.show()

 

이 데이터를 가장 잘 표현하는 직선을 그린다.

y = ax + b (a는 기울기 (slop), b는 절편)

  • 초기의 기울기 a와 절편 b는 랜덤하게 결정되고, 그 이후 우리가 가지는 데이터 특성을 가장 잘 표현하기 위한 직선을 찾아가는 과정이 진행되게 된다.

  • 그 과정을 학습 (learning)이라고 한다.

  • 결국은 데이터를 가장 잘 표현하는 직선 (y)를 만들 수 있고,

  • 이 직선을 predictive model이라고 한다. => linear regression

  • y = ax + b => 수학에서는 이렇게 표현한다. (a는 기울기 (slop), b는 절편)

  • y = Wx + b (W: weight, 가중치, b : bias, 바이어스)

  • W, b는 어떻게 결정되는가?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = { '공부시간(x)' : [1,2,3,4,5,7,8,10,12,13,14,15,18,20,25,28,30],
         '시험점수(t)' : [5,7,20,31,40,44,46,49,60,62,70,80,85,91,92,97,98]}

df = pd.DataFrame(data)

plt.scatter(df['공부시간(x)'],df['시험점수(t)'])  # 산점도를 구할 수 있어요!
# 직선을 표현하는게...y = ax + b
plt.plot(df['공부시간(x)'],df['공부시간(x)']*2 + 3, color='g')
plt.plot(df['공부시간(x)'],df['공부시간(x)']*5 - 7, color='r')
plt.plot(df['공부시간(x)'],df['공부시간(x)']*1 + 8, color='b')
plt.plot(df['공부시간(x)'],df['공부시간(x)']*4 - 10, color='magenta')
plt.show()

 

오차와 손실함수

오차와 최소제곱법

# 오차
# 오차를 이해하기 위해 선 1개만 가지고 생각해 보자
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = { '공부시간(x)' : [1,2,3,4,5,7,8,10,12,13,14,15,18,20,25,28,30],
         '시험점수(t)' : [5,7,20,31,40,44,46,49,60,62,70,80,85,91,92,97,98]}

df = pd.DataFrame(data)

plt.scatter(df['공부시간(x)'],df['시험점수(t)'])  # 산점도를 구할 수 있어요!
plt.plot(df['공부시간(x)'],df['공부시간(x)']*5 - 7, color='r')
plt.show()

 

 

loss function (손실함수)와 그래프

 

# loss function의 모양을 확인하기 위해 graph를 그린다.

import numpy as np
import matplotlib.pyplot as plt

# training data set
x = np.arange(1,101)
t = np.arange(1,101)

# W
W = np.arange(-10,13)

loss = []

for tmp in W:
    loss.append(np.power((t-tmp*x),2).mean())

plt.plot(W,loss)
plt.show()

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함