728x90
안녕하세요 뚜디 입니다 :D
선형 회귀 분석 및 비용 최소화 방법(2)
[ML/DL] 선형 회귀 분석 및 비용 최소화 방법 (tistory.com)
이번 포스팅에서는 비용 최소화, Cost Minimize하는 것을 TensorFlow로 어떻게 구현하는지 알아보도록 하겠습니다.
이전 선형회귀 분석 및 비용 최소화 방법 포스팅을 보지않으셨다면 먼저 위 링크를 클릭해 확인하고 보시는것을 추천드립니다.
간략화된 가설함수에 대해 다시 한번 간략하게 살펴보고 넘어가도록 합니다.
간략화된 가설함수란, H(x) = Wx + b -> H(x) = Wx 즉, b없이 간략하게 Wx로 표현했고,
비용함수 역시 b가 없는 간략화된 수식으로 재정의를 했습니다.
1. 비용 함수(Cost Function)을 Python으로 구현
import numpy as np
x = np.array([1,2,3])
y = np.array([1,2,3])
def cost_func(w, x, y):
c = 0
for i in range(len(x)):
c == (w * x[i] - y[i]) ** 2
return c / len(x)
for feed_w in np.linspace(-3, 5, num = 15):
curr_cost = cost_func(feed_w, x, y)
print("{:6.3f} | {:10.5f}". format(feed_w, curr_cost))
이 Cost를 그대로 파이썬 코드로 한번 옯겨보도록 하겠습니다.
데이터는 아주 간단하게 x, y [1, 2, 3] 동일하게 준비를 하고, cost_func을 통해 함수를 구현합니다.
c == (w * x[i] - y[i]) ** 2 : (wx - y)^2
2. 비용 함수(Cost Function)을 TensorFlow으로 구현
import numpy as np
import tensorflow as tf
x = np.array([1,2,3])
y = np.array([1,2,3])
def cost_func(w, x, y):
hypothesis = x * w
return tf.reduce_mean(tf.square(hypothesis - y))
w_values = np.linspace(-3, 5, num = 15)
cost_values = []
for feed_w in w_values:
curr_cost = cost_func(feed_w, x, y)
cost_values.append(curr_cost)
print("{:6.3f} | {:10.5f}". format(feed_w, curr_cost))
비용 함수를 TensorFlow으로 구현을 하면 Python으로 구현하는것과 차이는 없습니다.
단, TensorFlow에서 제공해주는 함수에 대해 알아보도록 하겠습니다.
hypothesis = x * w : 가상함수 선언
tf.reduce_mean(tf.square(hypothesis - y))
-> tf.square(hypothesis - y) : 가상함수에서 y를 빼고, 그것을 제곱
-> tf.reduce_mean(...) : 평균
3. 경사 하강법(Gradient descent)를 Tensorflow로 구현하기
※ 경사 하강법(Gradient descent) TensorFlow로 구현
alpha = 0.01 # learing rate
gradient = tf.reduce_mean(tf.multiply(tf.multiply(w, x) - y, x))
descent = w - tf.multiply(alpha, gradient)
w.assign(descent)
※ 경사 하강법(Gradient descent) TensorFlow로 구현 예제
import tensorflow as tf
import numpy as np
tf.compat.v1.set_random_seed(0) # for reproducibility
x_data = [1., 2., 3., 4.]
y_data = [1., 3., 5., 7.]
w = tf.Variable(tf.random.normal([1], -100, 100))
for step in range(300):
hypothesis = w * x
cost = tf.reduce_mean(tf.square(hypothesis - y))
alpha = 0.01 #learing rate
gradient = tf.reduce_mean(tf.multiply(tf.multiply(w, x) - y, x))
descent = w - tf.multiply(alpha, gradient)
w.assign(descent)
if step % 10 == 0:
print('{:5} | {:10.4f} | {:10.6f}'.format(step, cost.numpy(), w.numpy()[0]))
결과 값은 Step | cost | w 로 출력되며, 값을 살펴보게되면,
Cost값은 처음에 굉장히 큰 값을 가지고 있다가 점점 급속하게 줄어 0 으로 수렴하는것을 볼 수 있고,
w(가설함수) 값은 -100~100 사이 랜덤 값에서 시작하여 1(특정한 값)로 수렴하는것을 볼 수 있습니다.
import tensorflow as tf
import numpy as np
tf.compat.v1.set_random_seed(0) # for reproducibility
x_data = [1., 2., 3., 4.]
y_data = [1., 3., 5., 7.]
w = tf.Variable([5.0])
for step in range(300):
hypothesis = w * x
cost = tf.reduce_mean(tf.square(hypothesis - y))
alpha = 0.01 #learing rate
gradient = tf.reduce_mean(tf.multiply(tf.multiply(w, x) - y, x))
descent = w - tf.multiply(alpha, gradient)
w.assign(descent)
if step % 10 == 0:
print('{:5} | {:10.4f} | {:10.6f}'.format(step, cost.numpy(), w.numpy()[0]))
w값을 랜덤 값이 아닌, 특정 값을 주어도 결과는 동일하게 나타나는 것을 확인할 수 있습니다.
결과를 보면, w 값은 어떤 값이던 상관없이(-3 이던 5 이던) Cost 는 0 으로 w는 1(특정한 값 : 현재 여기서는 '1')로 수렴하는 것을 확인할 수 있습니다.
728x90
'Machine Learning > Basic Machine Learning' 카테고리의 다른 글
[ML/DL]다변수 선형 회귀 분석 Multi-variable Linear Regression(2) (0) | 2022.01.20 |
---|---|
[ML/DL] 다변수 선형 회귀 분석 Multi-variable Linear Regression (0) | 2022.01.19 |
[ML/DL] 선형 회귀 분석 및 비용 최소화 방법 (0) | 2021.10.19 |
[ML/DL] 선형회귀(Linear Regression)를 TensorFlow로 구현하기 (0) | 2021.10.18 |
[ML/DL] 선형회귀(Linear Regression)의 개념 (0) | 2021.10.17 |