import tensorflow as tf
tf.compat.v1.set_random_seed(123)

#1. 데이터

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.]

# 실습

x1 = tf.compat.v1.placeholder(tf.float32)
x2 = tf.compat.v1.placeholder(tf.float32)
x3 = tf.compat.v1.placeholder(tf.float32)
y = tf.compat.v1.placeholder(tf.float32)

#h = x1w1 + x2w2 + x3w3 + b

w1 = tf.compat.v1.Variable(tf.compat.v1.random_normal([1]))
w2 = tf.compat.v1.Variable(tf.compat.v1.random_normal([1]))
w3 = tf.compat.v1.Variable(tf.compat.v1.random_normal([1]))
b = tf.compat.v1.Variable(tf.compat.v1.random_normal([1]))

#2. 모델
hypothesis = x1*w1 + x2*w2 + x3*w3 + b

#3-1 컴파일
loss = tf.reduce_mean(tf.square(hypothesis - y))  #mse
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(loss) #로스를 최소화 하는 방향으로 훈련

with tf.compat.v1.Session() as sess :
    sess.run(tf.compat.v1.global_variables_initializer())
    
    #model.fit()
    epochs = 5001
    for step in range(epochs) :
        _, loss_val, w1_val, w2_val, w3_val, b_val = sess.run([train, loss, w1, w2, w3, b], feed_dict = {x1 : x1_data, x2 : x2_data, x3 : x3_data, y : y_data})
        
        if step %100 == 0 :
            print(step, 'loss :', loss_val, 'w1 :', w1_val, 'w2 :', w2_val, 'w3 :', w3_val, 'b :', b_val)

from sklearn.metrics import r2_score, mean_squared_error

y_pred = x1_data * w1_val + x2_data * w2_val + x3_data * w3_val

r2 = r2_score(y_data, y_pred)
mse = mean_squared_error(y_data, y_pred)

print('R2 score :', r2)

print('mse :', mse)

tf13_mv2

tf13_mv3