다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 3강 - 다변인 선형회귀 모델 개발하기
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 3강 - 다변인 선형회귀 모델 개발하기
나동빈
이번 시간에는 지난 시간에 수집한 데이터를 이용하여 다변인 선형회귀로 학습 모델을 만들어 볼 것입니다.
※ 데이터 준비하기 ※
가장 먼저 지난 시간에 정제해 놓은 학습 데이터를 준비합니다.
※ 다변인 선형회귀 ※
다변인 선형회귀는 모델에 영향을 미치는 변인이 여러 개 일 때 사용하는 모델입니다. 현재 우리의 데이터에서는 변인이 '평균 온도', '최저 온도', '최고 온도', '강수량'이므로 이 모든 변인이 '가격'에 영향을 미친다고 감안해야 합니다. 따라서 가중치(Weight)을 고려했을 때 다음과 같은 수식을 세울 수 있습니다.
H(x1, x2, x3, x4) = x1w1 + x2w2 + x3w3 + x4w4
이는 행렬의 곱을 이용하면 다음과 같이 간단하게 표현할 수 있습니다.
H(X) = XW
이를 소스코드에 그대로 옮기면 됩니다. 다만 학습의 보폭(Step)을 적절히 선택해야 안정적으로 학습이 가능할 것입니다. 저는 학습률을 0.000005로 설정하여 되도록 짧은 시간에 정확한 결과가 나오도록 구현해보았습니다.
※ 파이썬 소스코드 ※
파이썬에서 텐서플로우(Tensorflow) 라이브러리를 활용해 다변인 선형회귀 모델을 구현합니다.
import tensorflow as tf
import numpy as np
from pandas.io.parsers import read_csv
model = tf.global_variables_initializer();
data = read_csv('price data.csv', sep=',')
xy = np.array(data, dtype=np.float32)
# 4개의 변인을 입력을 받습니다.
x_data = xy[:, 1:-1]
# 가격 값을 입력 받습니다.
y_data = xy[:, [-1]]
# 플레이스 홀더를 설정합니다.
X = tf.placeholder(tf.float32, shape=[None, 4])
Y = tf.placeholder(tf.float32, shape=[None, 1])
W = tf.Variable(tf.random_normal([4, 1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")
# 가설을 설정합니다.
hypothesis = tf.matmul(X, W) + b
# 비용 함수를 설정합니다.
cost = tf.reduce_mean(tf.square(hypothesis - Y))
# 최적화 함수를 설정합니다.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.000005)
train = optimizer.minimize(cost)
# 세션을 생성합니다.
sess = tf.Session()
# 글로벌 변수를 초기화합니다.
sess.run(tf.global_variables_initializer())
# 학습을 수행합니다.
for step in range(100001):
cost_, hypo_, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_data, Y: y_data})
if step % 500 == 0:
print("#", step, " 손실 비용: ", cost_)
print("- 배추 가격: ", hypo_[0])
# 학습된 모델을 저장합니다.
saver = tf.train.Saver()
save_path = saver.save(sess, "./saved.cpkt")
print('학습된 모델을 저장했습니다.')
※ 저장된 모델 확인하기 ※
이제 위 소스코드를 실행하면 됩니다. 결과적으로 향후 사용자가 날씨 정보를 입력했을 때 배추 가격을 바로 보여줄 수 있도록 학습 모델이 파일 형태로 저장된 것을 확인할 수 있습니다.
'선형회귀 AI 활용 프로젝트' 카테고리의 다른 글
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 6강 - 플라스크 웹 서버와 웹 디자인 구현하기 (1) | 2018.08.25 |
---|---|
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 5강 - 기초 데이터 시각화하기 (0) | 2018.08.25 |
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 4강 - 저장된 학습 모델로 배추 가격 예측하기 (6) | 2018.08.25 |
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 2강 - 프로젝트 아이디어 및 데이터 수집 (1) | 2018.08.23 |
다변인 선형회귀를 활용한 배추 가격 예측 AI 개발하기 1강 - 프로젝트 개요 (0) | 2018.08.23 |