Data Science

파이썬 머신러닝 linear regression과 supervised learning (모두의 딥러닝) | sTricky

sTricky 2021. 1. 17. 15:56

파이썬 머신러닝 linear regression과 supervised learning (모두의 딥러닝) | sTricky

파이썬 머신러닝 linear regression과 supervised learning (모두의 딥러닝) sTricky

오늘은 머신러닝 학습 두번째 시간 입니다.
오늘은 Supervised Learning에 대해서 공부를 해보겠습니다.
이번 공부도 역시 <모두의 딥러닝>을 통해서 공부한 결과를 정리하는 수준 입니다.

Supervised Learning 지도학습 이란?

머신러닝에서 supervised learning이란, 이미 정해진 데이터들이 있고, 우리는 이 데이터들을 training set 또는 training data라고 합니다. 그 데이터들을 학습을 하는것이 바로 supervised learning이라고 합니다. 예를 들어서 고양이나 개의 그림을 가져다 놓고 "이건 고양이야", "이건 개야" 라고 학습을 계속 시키다가 training data가 아닌 다른 새로운 데이터를 가지고 왔을때 개인지 고양이 인지 구분 시키는 것을 말 하는것 이죠.

regression model 이란?

regression model이란, Supervised Learning에서도 어떤 값(x)이 들어 올때, 결과값(y)를 예측 하는 모델 입니다. 아래 자료도 한번 같이 보겠습니다. 왼쪽 x는 학습시간, 결과인 y는 점수를 뜻합니다. 10시간 공부했을때 90점을 획득했고, 3시간 공부했을때는 50점을 획득 한다는 의미 인 것이죠. 이런 데이터로 학습을 하여 7시간 공부했을 때는 과연 몇점을 획득 할 수 있을까? 하는것이 바로 이 regression model 입니다.

regression model data

실습 데이터

자, 첫번째 실습으로 아주 간단한 데이터를 준비해주셨더라구요. 이 데이터를 통해서 한번 Supervised Learning의 regression model을학습해보도록하겠습니다. 학습 데이터는 다음과 같습니다.

regression model data

x가 1일때 y는 1입니다. 역시, x가 3일때는 y도 3이죠.
이걸 가지고 한번 regression medel을 만들어 보도록 하겠습니다. 위 데이터를 가지고 먼저 그래프를 만들어 보도록 하겠습니다.

regression model graph

위와 같은 데이터를 Linear regression 입니다. 바로 입력값에 대비하여 출력값이 비례하는것을 말 하는것이죠. 우리 일상생활속에서 아주 흔한 케이스를 말하는 가설중 하나 입니다. 결국 이런 비례하는 선을 찾는것이 되겠죠. 이걸 우리는 수식으로 아래와 같이 나타 낼 수 있을겁니다.

 

 

 

H(x) = Wx + b

자, 그럼 여기서 위에서 정의한것을 우리의 가정이라고 정의 한다면, 실제 데이터는 좀 다를 수 있겠죠. 아래 그래프를 먼저 보시겠습니다.

Linear regression 실제 데이터

위 그래프에서 파란선은 실제 데이터고, 각 점 3개는 우리의 가설에 의한 데이터라고 한다면 각 점과 실제 데이터 사이의 갭(gap)이 생기겠죠. 이 차이를 구하는 공식이 필요 할 것 입니다. 그 차이를 구하는 공식은 먼저 아래와 같이 생각 할 수 있습니다.

cost function

H(x) 가 각 점을 뜻한다면 -y 는 그 가설인 점과 실제 데이터인 파란선까지의 거리를 말합니다. 
하지만, 이 거리가 항상 음수이진 않을 겁니다. 첫번째 x좌표의 1에 찍힌 점만 봐도 실제 데이터인 파란선보다 작기 때문에 0.5정도는 더해줘야 하겠죠? 그럴때는 아래와 같이 공식을 바꿔보겠습니다.

(H(x) - y)²

제곱을 씌움으로써 일단, 음수와 양수의 구분이 없어졌구요. 또한 차이가 클수록 그 차이에 대한 페널티를 부여 할 수 있게 되는겁니다. 이런식으로 그래프에 있는 세점을 모두 더하고, 다시 3으로 나눠주면 그것을 우린 cost function 이라고 부를 수 있게 되는 겁니다.

cost function

위 그림의 아랫쪽에 있는 cost function에서 m으로 표현된것이 바로 데이터의 갯수를 말 합니다.
결국 그럼 우리가 앞서 이야기 했던 Linear regression과 합치게 된다면 아래와 같은 함수가 나오게 될 것 입니다.

Cost function

이젠, 위 내용을 가지고 한번 실제로 tensorflow를 통해서 구현하는 실습을 해보도록 하겠습니다.

Linear regression을 위한 tensorflow 실습

 

 

 

자, 위에서 설명한 내용들을 python tensorflow 코드로 정리하면 아래와 같은 모습이 됩니다.

import tensorflow.compat.v1 as tf
 
with tf.compat.v1.Session() as sess:
# x, y data
  x_train = [1,2,3]
  y_train = [1,2,3]

  W = tf.Variable(tf.random_normal([1]), name='weight')
  b = tf.Variable(tf.random_normal([1]), name='bias')

# hypothesis 정의 H(x) = Wx + b
  hypothesis = x_train * W + b
# cost function 정의
# tf.reduce_mean = 평균을 내주는 tensorflow의 함수
  cost = tf.reduce_mean(tf.square(hypothesis - y_train))

  optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
  train = optimizer.minimize(cost)

  sess = tf.Session()
  #sess.run(tf.initialize_all_variables())
  sess.run(tf.global_variables_initializer())

  for step in range(2001 ):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(cost), sess.run(W), sess.run(b))

필요한 내용은 주석으로 정리를 했습니다.
결론적으로 우리가 의도하는 x가 1일때 y가 1이되고, 또 x가 3일때, y가 3이 되려면 hypothesis 식에서 W와 b는 어떤 값에 가까워야 할까요? W는 1에 가까워야 하고, b는 0에 가까워야 하겠죠.
위 tensorflow 학습은 대략 2천번 정도 하게 작성이 되어 있는데 점점 가까워 지는지 한번 보도록 하겠습니다.

tensorflow 학습 결과

위 학습 결과를 보시면 하얀선을 따라가는 W값은 점점 1에 가까워 지는것을 확인 할 수 있습니다. 반대로 빨간색 선은 점점 0으로 수렴해가는 모습을 확인 할 수 있습니다. 바로 이것이 머신러닝 인것 이죠.

자, 이렇게 오늘은 Linear regression의 개념과 실습을 해보았습니다.
생각만큼 많이 어렵진 않은것 같습니다. 지난 시간 강의도 한번 다시 보시고, <모두의 딥러닝>을 통해서 더 자세히 확인 해보시는것도 좋은 방법일것 같습니다.
감사합니다.

# 모두의 딥러닝

https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5

# 관련 강의 다시 보러 가기

2021/01/12 - [Data Science] - 파이썬 머신러닝 스터디 모두의 딥러닝 computational graph | sTricky

 

파이썬 머신러닝 스터디 모두의 딥러닝 computational graph | sTricky

파이썬 머신러닝 스터디 모두의 딥러닝 computational graph | sTricky 안녕하세요. 오늘부터 파이썬 머신러닝 스터디를 시작합니다. 그 첫시간으로 우선, 제 맥북에 파이썬 가상환경을 설치 하고, 이어

stricky.tistory.com

2021/01/24 - [Data Science] - Multivariable linear regression 딥러닝 예제 개념 및 실습 | sTricky

 

Multivariable linear regression 딥러닝 예제 개념 및 실습 | sTricky

Multivariable linear regression 딥러닝 예제 개념 및 실습 | sTricky 안녕하세요. 딥러닝 시간 3번째 시간 입니다. 지난 딥러닝 강의 및 예제를 보고 싶으신 분들은 아래 포스트를 참고 해주시면 됩니다. 참

stricky.tistory.com

by.sTricky