下表是某种商品的需求量(y,吨)、价格(x1,元/千克)和消费者收入(x2,元)观测值。
序号 | X1 | X2 | y |
1 | 5 | 1000 | 100 |
2 | 7 | 600 | 75 |
3 | 6 | 1200 | 80 |
4 | 6 | 500 | 70 |
5 | 8 | 30 | 50 |
6 | 7 | 400 | 65 |
7 | 5 | 1300 | 90 |
8 | 4 | 1100 | 100 |
9 | 3 | 1300 | 110 |
10 | 9 | 300 | 60 |
请用线性回归模型实现对如下数据的预测:
序号 | X1 | X2 | y |
1 | 8 | 900 | |
2 | 7 | 1000 |
|
3 | 5 | 900 |
|
4 | 4 | 1500 |
|
5 | 8 | 130 |
|
要预测的为表2的y值
import tensorflow as tf
import numpy as np
import pylab as plt
x1 = np.float32([5,7,6,6,8,7,5,4,3,9])
x2 = np.float32([1000,600,1200,500,30,400,1300,1100,1300,300])
y1 = np.float32([100,75,80,70,50,65,90,100,110,60])
plt.scatter(x1,y1)
#tf.truncated_normal()产生正态分布的随机数
w1 = tf.Variable(tf.truncated_normal([]),name = 'w1')
w2 = tf.Variable(tf.truncated_normal([]),name = 'w2')
b = tf.Variable(tf.truncated_normal([]),name = 'b')
#两个矩阵中的元素对应相乘
price = tf.multiply(w1,x1) + tf.multiply(w2,x2) + b
loss = tf.reduce_mean(tf.square(price - y1))
optimizer = tf.train.AdamOptimizer(0.2)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(20000):
sess.run(train)
if i % 1000 == 0:
print('loss:',sess.run(loss))
w1_v,w2_v,b_v = sess.run([w1,w2,b])
sess.close()
yu_x1 = np.float32([8,7,5,4,8])
yu_y1 = np.float32([900,1000,900,1500,130])
print("w1_v:",w1_v,"w2_v:",w2_v,"b_v:",b_v)
print("函数表达式为:y = ",w1_v,"×x1+",w2_v ,"×x2+",b_v)
for i in range(5):
yu_y = yu_x1[i]*w1_v + yu_y1[i]*w2_v + b_v
print(yu_y)
y = w1_v * x1 + w2_v + b_v
plt.plot(x1,y)
plt.show()
输出:
loss: 427720.06 loss: 138.73581 loss: 121.563866 loss: 97.33757 loss: 70.15316 loss: 47.760784 loss: 37.459503 loss: 33.808277 loss: 31.81664 loss: 31.200138 loss: 30.957703 loss: 30.863361 loss: 30.82673 loss: 30.822744 loss: 30.806988 loss: 30.804804 loss: 30.803982 loss: 30.805294 loss: 32.933388 loss: 30.803446 w1_v: -6.4932446 w2_v: 0.016316965 b_v: 106.33415 函数表达式为:y = -6.4932446 ×x1+ 0.016316965 ×x2+ 106.33415 预测的y值为: 69.07346 77.1984 88.55319 104.836624 56.5094