[ML lec 04] multi-variable linear regression (*new)

2017. 7. 17. 15:42·AI/Lecture notes

이번 포스트에서는 지난번 Linear regression에 이어서, 하나의 변수가 아니라 여러개의 multi-varaible을 사용하는 방법에 대해서 포스트하겠습니다.




우선 포스트를 시작하기 전에 지난번에 올렸던 내용을 복습해보겠습니다.


Linear regression을 설계하기 위해선 세가지가 필요합니다.


우선 Hypothesis가 있는데요, Linear regression에서는 H(x) = Wx + b로 가설을 세우게됩니다.


다음으로는 이 가설이 얼마나 맞는지에 대해서 판단하는 Cost function이 필요합니다. 


마지막으로는 이 Cost를 최적화하는 Gradient Descent Algorithm이 필요합니다. 



여기까지에 대해서 완벽히 이해하셨으면, 이번 포스트 내용에 대한 기초적인 이해는 충분하다고 할 수 있습니다.





여러개의 인풋(아래의 예에서는 3개의 인풋)에 대해서 학습하는 과정에 대해서 알아보겠습니다.





기말고사 점수에 대해서 quiz 1과 quiz 2 그리고 중간고사 점수를 사용하여 예측을 할 수 있을까에 대한 고민이 있습니다.


이런 경우에는 어떻게 해야할까요?



이 전의 한개의 인풋에 대해서는



라는 가설을 세웠습니다.



이것을 확장하여 세개의 인풋에 대한 가설을 세워보면



라고 확장할 수 있습니다.



또 이것은 n개의 인풋에 대하여

 


라고 확장할 수 있습니다.




이 가설을 matrix를 통해서 표현하면



과 같이 표현할 수 있습니다.



위의 데이터에서 한 행에 대해서 우리는 instance라고 부릅니다.


행렬에서는 이 인스턴스들을 전부 연산할 수 있습니다.




따라서 matrix를 썼을 때의 좋은 점은 모든 인스턴스를 행렬화하여 W를 곱하게 되면


원하는 모든 결과를 얻을 수 있다는 점입니다.



다른 행렬의 성질같은 경우에는 다른 포스트에서 다루도록 하겠습니다.


우선 우리는 이와같은 과정에서 여러 인풋에 대해서 새로운 가설을 세우는 과정을 진행하였습니다.



Cost function과 이 최적화 알고리즘은 이전의 한개의 인풋에 대한 방법과 동일합니다.



즉 여러개 인풋을 사용하는 Linear Regression은 가설의 부분에서 차이가 크고, 다른 부분은 대동소이합니다.







Tensorflow



예시1)

import tensorflow as tf

x1_data = [73., 93., 89., 96., 73.]
x2_data = [80., 88., 91., 98., 66.]
x3_data = [75., 93., 90., 100., 70.]
y_data = [152., 185., 180., 196., 142.]

# placeholders for a tensor that will be always fed.
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
x3 = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

w1 = tf.Variable(tf.random_normal([1]), name='weight1')
w2 = tf.Variable(tf.random_normal([1]), name='weight2')
w3 = tf.Variable(tf.random_normal([1]), name='weight3')
b = tf.Variable(tf.random_normal([1]), name='bias')

hypothesis = x1 * w1 + x2 * w2 + x3 * w3 + b

# cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))

# Minimize. Need a very small learning rate for this data set
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)

# Launch the graph in a session.
sess = tf.Session()

# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={x1: x1_data, x2: x2_data, x3: x3_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)


위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.





예시1)의 소스코드는 이론에서 말했던 matrix의 개념을 사용한 것은 아닙니다.


따라서 소스코드가 상당히 복잡한데요, 이런 방법은 거의 사용되지 않습니다.



예시2)

import tensorflow as tf

x_data = [[73., 80., 75.], [93., 88., 93.],
[89., 91., 90.], [96., 98., 100.], [73., 66., 70.]]
y_data = [[152.], [185.], [180.], [196.], [142.]]

# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

# Hypothesis
hypothesis = tf.matmul(X, W) + b

# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))

# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)

# Launch the graph in a session.
sess = tf.Session()

# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)

예시2)의 소스코드는 matrix의 개념을 사용하여 소스코드를 구현한 것입니다.


예시1)의 소스코드보다 훨씬 구조가 간단한 것을 눈으로 확인할 수 있습니다.

저작자표시 (새창열림)

'AI > Lecture notes' 카테고리의 다른 글

[ML lec 06] Softmax Regression  (0) 2017.07.21
[ML lec 05] Logistic Classification  (0) 2017.07.19
[ML lec 03] Linear Regression의 cost 최소화 알고리즘의 원리 설명  (0) 2017.07.15
[ML lec 02] Linear Regression  (1) 2017.07.06
[ML lec 01] 기본적인 머신러닝의 용어와 개념 설명  (0) 2017.07.04
'AI/Lecture notes' 카테고리의 다른 글
  • [ML lec 06] Softmax Regression
  • [ML lec 05] Logistic Classification
  • [ML lec 03] Linear Regression의 cost 최소화 알고리즘의 원리 설명
  • [ML lec 02] Linear Regression
pfldy2850
pfldy2850
인공지능의 서비스화와 현실화에 관심이 많은 엔지니어입니다.
  • pfldy2850
    DEV.DY
    Github LinkedIn
  • 전체
    오늘
    어제
    • All (105)
      • AI (68)
        • 어플리케이션 개발 (11)
        • 모델 인퍼런스 (9)
        • 검색 시스템 (11)
        • MLOps (8)
        • 기술,논문 리뷰 (7)
        • Lecture notes (10)
        • 오픈소스 릴리즈 노트 (12)
      • Infra (4)
        • Kubernetes (1)
        • Service Mesh (1)
        • Service Proxy (1)
        • Storage (1)
      • Data Engineering (4)
        • Spark (3)
        • Kafka (1)
        • Delta Lake (0)
      • 컴퓨터 공학 (2)
        • 소프트웨어 공학 (2)
      • 개발 (16)
        • ReactJS (8)
        • NodeJS (2)
        • Python (4)
        • Pytorch (1)
        • git (1)
      • 영어공부 (2)
        • GPT로 영어 회화 공부 (2)
      • 활동 (2)
        • 2017 NDC (2)
      • 기타 (1)
      • 레거시 (6)
        • OS (6)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
pfldy2850
[ML lec 04] multi-variable linear regression (*new)
상단으로

티스토리툴바