가장 쉽게 배우는 머신러닝 1주차 : 간단한 선형회귀 실습

wwoo·2021년 6월 28일
0

머신러닝

목록 보기
5/10
post-thumbnail

5. 📚간단한 선형회귀 실습

1. 📘TensorFlow를 이용한 선형회귀 실습


import tensorflow as tf

tf.compat.v1.disable_eager_execution()

👉 tensorflow를 임포트하고 tensorflow가 version1이기 때문에 tf.compat.v1.을 추가한다.

x_data = [[1, 1], [2, 2], [3, 3]]
y_data = [[10], [20], [30]]

👉 x_data는 입력, y_data는 출력으로 현재 알고 있는 데이터값이다.

X = tf.compat.v1.placeholder(tf.float32, shape = [None, 2])
Y = tf.compat.v1.placeholder(tf.float32, shape = [None, 1])

W = tf.Variable(tf.random.normal(shape = (2,1)), name = 'W')
b = tf.Variable(tf.random.normal(shape = (1, )), name = 'b')

👉 x_data와 y_data를 저장할 공간 X, Y를 만들어 주고 W와 b를 랜덤하게 초기화한다.


hypothesis = tf.matmul(X, W) + b
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate = 0.01).minimize(cost)

👉 이제 가설과 비용 함수, optimizer를 정의한다. 가설은 선형 회귀로, 비용 함수는 mean squared error로, optimizer는 gradient descent method로 정의하고 learning rate는 0.01s로 설정한다.


with tf.compat.v1.Session() as sess:
	sess.run(tf.compat.v1.global_variables_initializer())
    
    for step in range(50):
    x, W_, b_, _=sess.run([cost, W, b, optimizer], feed_dict = {X : x_data, Y : y_data})
    print('Step : %2d\t loss : %.2f\t' % (step, c))
    
    print(sess.run(hypothesis, feed_dict = {X : [[4, 4]]}))

👉 매 스텝 별로 결과를 출력하며 비용 함수가 줄어드는 것을 확인한다.

📌
session : 모든 변수, 그래프를 저장하는 저장소 global_variables_initializer : 모든 변수를 초기화하는 명령어
for step in range(50) : 50번 반복학습
feed_dict = {X : x_data, Y : y_data} : dataset 넣어줌

👉 위의 결과에서 총 50번의 step으로 학습을 하고 있고 점점 loss가 작아지는 것을 볼 수 있다. 검증을 하기 위해 X에 [4, 4]를 넣었을 때 38.609562로 예상된 정답인 40에 거의 근접한 것을 볼 수 있다.

2. 📕Keras를 이용한 선형회귀 실습

tensorflow에 Keras라는 class를 이용해 더 쉽게 선형회귀 실습할 수 있다.

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
form tensorflow.keras.optimizers import Adam, SGD

x_data = np.array([[1], [2], [3]])
y_data = np.array([[10], [20], [30]])

model = Sequential([
	Dense(1)
])

model.compile(loss = 'mean_Squared_error', optimizer = SGD(lr = 0.1))

model.fit(x_data, y_data, epochs = 20)

📌
model.compile : 비용함수와 optimizer, learning rate을 정의
model.fit : 학습, epochs는 복수형으로 써야하며 반복학습을 몇번할지 결정


👉 위의 결과에서 총 20번의 step으로 학습을 하고 있고 점점 loss가 작아지는 것을 볼 수 있다.


y_pred = model.predict([[4]])
print(y_pred)

👉 검증을 하기 위해 X에 [5]를 넣었을 때 47.5317로 예상된 정답인 50에 거의 근접한 것을 볼 수 있다.

0개의 댓글