본문 바로가기
Study/Machine&Deep Learning

[ML] multi-variable linear regression

by graygreat 2018. 5. 8.
728x90
반응형

multi-variable linear regression




x의 값이 여러개이면 위와 같이 여러번 곱해주면 된다. 


하지만 단점이 있다.


값이 100, 1000 ... 너무 많아지면 연산이 매우 복잡해진다.


우리는 이러한 문제를 Matrix를 이용하여 해결할 수 있다.


기본 원리는 아래와 같다. 



Matrix를 사용하면  n개를 편하게 연산할 수 있다.



※ 주의사항

tensorflow 계산할 때는 H(x) = XW로 해주자!


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Lab 4 Multi-variable linear regression
import tensorflow as tf
 
x1_data = [7393899673]
x2_data = [8088919866]
x3_data = [75939010070]
 
y_data = [152185180196142]
 
# placeholders for a tensor that will be always fed.
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
x3 = tf.placeholder(tf.float32)
 
= 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')
= 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 grapph 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)
 




위에 복잡하게 나열한 것을 matrix를 사용하여 간편하게 만듦.


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Lab 4 Multi-variable linear regression
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.
= tf.placeholder(tf.float32, shape=[None, 3])
= tf.placeholder(tf.float32, shape=[None, 1])
 
= tf.Variable(tf.random_normal([31]), name='weight')
= 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)
 


 

 


반응형

댓글