티스토리 뷰
딥러닝을 사용할 수 있는 프레임워크 Tensorflow를 통해 선형회귀(Linear Regression)을 구현하겠습니다.
선형회귀란 데이터를 선형적으로 표현할 수 있는 것을 말합니다.
기본적으로 2차원 그래프에서 한 직선을 구한다고 생각하면 됩니다.
tensorflow 소스를 통해 살펴보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import numpy as np import matplotlib.pyplot as plt import tensorflow as tf x_data = [4.0391, 1.3197, 9.5613, 0.5978, 3.5316, 0.1540, 1.6899, 7.3172, 4.5092, 2.9632] y_data = [11.4215, 10.0112, 30.2991, 1.0625, 13.1776, -3.1976, 6.7367, 23.8550, 14.8951, 11.6137] X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) W = tf.Variable([.3],tf.float32) b = tf.Variable([.3],tf.float32) Hypothesis = X * W + b cost = tf.reduce_mean(tf.square(Y-Hypothesis)) train = tf.train.AdamOptimizer(0.01).minimize(cost) sess = tf.Session() sess.run(tf.global_variables_initializer()) for i in range(1001): c, _ = sess.run([cost,train], feed_dict={X:x_data,Y:y_data}) if i%100==0: print('cost:',c) print('Finish') | cs |
일단 소스는 위와 같습니다. 27줄로 굉장히 짧습니다.
데이터는 무작위로 10개의 점을 구성하였습니다.
1 2 | plt.scatter(x_data,y_data) plt.show() | cs |
이 두줄로 그래프를 살펴보면 아래와 같습니다.
이 점들을 하나의 직선으로 표현하려면 어떻게 긋는게 가장 이상적일까요?
그러한 직선을 찾는것이 Linear Regression이라고 할 수 있습니다.
X,Y와 W,b 각각을 placeholder와 Variables로 선언해 준 후에
네트워크를 구성합니다.
예측결과 Hypothesis는 X*W+b의 형태일 것이며
간단한 데이터이기 때문에 활성화함수(sigmoid, relu, tanh 등)은 필요하지 않습니다.
예측값과 실제값 사의의 오차값 cost는 (Y-Hypothesis)^2 를 평균낸 값으로
이 cost값을 줄이기 위한 학습을 합니다.
이때, 훈련 알고리즘으로 AdamOptimizer를 사용하였고 Learning rate는 0.01로 하였습니다.
총 1001번을 훈련하는 동안 cost가 줄어드는 것을 확인 할 수 있고
학습이 잘 완료되면 Finish가 출력됩니다.
1 2 3 4 5 6 | x = np.arange(0,10,0.1) predicted_x = sess.run(Hypothesis,feed_dict={X:x}) plt.plot(x,predicted_x) plt.show() | cs |
0~10 범위에서 0~30의 출력을 하는 직선이 만들어졌습니다.
위의 점으로 표현한 그래프에서 점들을 가장 잘 표현하는 직선이 그려졌음을 알 수 있습니다.
'ML | DL' 카테고리의 다른 글
[딥러닝]tensorflow로 손글씨 숫자 인식하기(MNIST) (0) | 2019.01.31 |
---|---|
[딥러닝]tensorflow로 로지스틱 회귀 구현하기(Logistic Regression) (0) | 2019.01.30 |
[딥러닝]windows에서 tensorflow gpu버전 설치하기 (0) | 2019.01.24 |
[Machine Learning]K-means 알고리즘 (0) | 2019.01.21 |
[Coursera] Machine Learning 4주차 강의정리 (0) | 2018.09.10 |
- Total
- Today
- Yesterday