티스토리 뷰

선형회귀(Linear Regression)분석 모델

선형회귀란 머신러닝중에서도 지도학습(Supervised Learning)에 속하는 모델로, x,y값의 상관관계를 모델링하는 방식이다. 선형 예측 함수를 사용해 회귀식을 모델링하며, 알려지지 않은 파라미터는 데이터로부터 추정한다. 이렇게 만들어진 회귀식을 선형 모델이라고 한다. 가설(Hypothesis)을 세우고 손실함수를 통해 데이터로부터 알려지지 않은 파라미터인 W(weight), b(bias)를 찾는 분석 모델이다.

GradientDescent

경사하강법은 선형회귀분석모델을 통해 구현할 수 있는 모델로 minimize cost function값을 찾아내는 것이 목적이다.  cost function값이 낮을수록 예측한 y값과 실제 y값이 가장 유사한 형태의 그래프 라는 의미가 되며, W값을 조절하여 최소의 cost function을 찾는것이 경사하강법 모델의 주요 컨셉이다.

아래와 같은 x,y축 실제 데이터가 있다고하자.

X = [1.,2.,3.]
Y = [1.,2.,3.]


실제 데이터를 보고 가설을 세운다. 예측의 정확성을 높이기 위해 가설을 잘 세워야한다.
일반 선형회귀분석의 경우 아래와 같이 1차함수 식으로 가설을 세운다.

그리고 손실 함수인 cost function을 정의한다.
이 과정은 내가 세운 가설과 실제 데이터와의 손실이 얼마인지 구하는 과정이다.

이후 W값을 조절하여 가장 낮은 cost function값을 찾아내도록 하여 손실을 줄여나가면서
예측결과의 정확성을 높여나간다.
실제 동작하는 예제를 통해 살펴보도록 한다.
(tensorflow 설치법은 http://rocksea.tistory.com/443 이곳을 참고)

import tensorflow as tf import matplotlib.pyplot as plt X = [1.,2.,3.] Y = [1.,2.,3.] m = len(X) W = tf.placeholder(tf.float32) # Construct a linear model hypothesis = tf.multiply(X, W) # Cost function cost = tf.reduce_sum(tf.pow(hypothesis-Y, 2))/(m) # initializing the variables init = tf.initialize_all_variables() # For graph W_val = [] cost_val = [] # Launch the graph sess = tf.Session() sess.run(init) for i in range(-30, 50): print( i*0.1, sess.run(cost, feed_dict={W: i*0.1})) W_val.append( i*0.1) cost_val.append(sess.run(cost, feed_dict={W: i*0.1})) # Graphic display plt.plot(W_val, cost_val, 'ro') plt.xlabel('W') plt.ylabel('Cost') plt.show()

위 코드를 실행하면 아래와 같은 형태의 그래프를 확인 할 수 있을 것이다.
그래프를 보면 w값이 1에 가까울수록 cost function값이 낮아지는 것을 확인 할 수 있다.
즉 W가 1에 가까울수록 예측 정확도가 올라간다는 것을 확인 할 수 있다.

참조 URL :

https://gist.github.com/yunhwan1903/b1d7258dbc696e64117d15193d3f2cfb

'Developer' 카테고리의 다른 글

How to setup beatiful iterm2 with zsh on OSX.  (0) 2019.12.05
How to use Anaconda  (0) 2019.07.16
Installing tensorflow on MAC  (0) 2018.01.15
[GIT] commit, push 된 버전 삭제하기  (0) 2017.09.13
How to install Couchbase on OSX  (0) 2017.05.02
댓글