[텐서플로우] 다중회귀분석 (Multi-variable Linear Regression) 파이썬 코드

2020. 4. 17. 09:40노트/Python : 프로그래밍

★실행 환경 

tensorboard                        1.15.0
tensorflow                         1.15.0
tensorflow-estimator               1.15.1

Python 3.7.4

 

 

가설함수 

$H(x_1,x_2) = w_1x_1 + w_2x_2 + b $ 

$H(x) = W^T X$

 

비용함수 

$cost(W,b) = { 1 \over m} \sum_{i=1}^m (H(x^(i))-y^(i))^2 $

 

 

 

예제 데이터 

x1data = [73,93,90,95,72] # 모의고사 점수 
x2data = [80,88,92,98,66] # 모의고사 점수 
x3data = [75,92,90,100,70] # 모의고사 점수 
ydata = [152,185,180,195,140] # 수능 점수 

 

변수 선언

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]))
w2 = tf.Variable(tf.random_normal([1]))
w3 = tf.Variable(tf.random_normal([1]))
b = tf.Variable(tf.random_normal([1]))

 

가설함수 및 비용함수 정의 후 트레이닝 

# 가설함수 
hf = x1*w1 + x2 * w2 + x3 * w3 + b 

# 비용함수
cost = tf.reduce_mean(tf.square( hf - y))

# 트레이닝 
opt = tf.train.GradientDescentOptimizer(1e-5)
train = opt.minimize(cost)

 

트레이닝 결과

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for step in range(2001):
    cv, hfv, _ = sess.run([cost, hf, train], feed_dict={x1:x1data, x2:x2data, x3:x3data , y:ydata})
    if step%200==0:
        print(step,"cost:",cv, "\n prediction:",hfv)
        
>>>

0 cost: 90945.16 
 prediction: [-113.759026 -138.50868  -136.33804  -150.4062   -105.08135 ]
200 cost: 4.6141977 
 prediction: [153.92111 182.20943 183.0842  193.7376  139.3021 ]
400 cost: 4.3903937 
 prediction: [153.81433 182.28526 183.04729 193.7235  139.38766]
600 cost: 4.186384 
 prediction: [153.71259 182.35735 183.01184 193.71077 139.46892]
800 cost: 4.0003786 
 prediction: [153.6156  182.42583 182.97781 193.69928 139.546  ]
1000 cost: 3.830584 
 prediction: [153.52313 182.49092 182.94513 193.68901 139.61917]
1200 cost: 3.675536 
 prediction: [153.43495 182.55275 182.91373 193.67986 139.6886 ]
1400 cost: 3.5337787 
 prediction: [153.35092 182.61153 182.88353 193.67181 139.75449]
1600 cost: 3.404105 
 prediction: [153.27072 182.66733 182.85448 193.66475 139.81697]
1800 cost: 3.285336 
 prediction: [153.19427 182.72038 182.82654 193.65869 139.87628]
2000 cost: 3.1764889 
 prediction: [153.12132 182.77075 182.79964 193.65352 139.93251]

 

모델비교

2020/04/20 - [노트/Python : 프로그래밍] - [텐서플로우] 소프트맥스 회귀 (Softmax Regression) 분류 파이썬 코드

2020/04/18 - [노트/Python : 프로그래밍] - [텐서플로우] 다중 선형 회귀를 이용한 당뇨병 분류기 파이썬 코드

2020/04/14 - [노트/Python : 프로그래밍] - [텐서플로우] 선형회귀분석(Linear Regression) 기본 구조 파이썬 코드

2020/04/16 - [노트/Python : 프로그래밍] - [텐서플로우] 로지스틱 회귀(Logistic Regression) 분류 파이썬 코드