线性回归(LinearRegression),顾名思义是一种回归模型,拟合一个带有系数 $w = (w_1, ..., w_p)$ 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为:
$$ \min_{w}||wx - y||_{2}^{2} $$
本文旨在使用TensorFlow平台,实现线性回归的过程。
import tensorflow as tf
import numpy as np
# 使用NumPy生成假数据(phony data),总共100个点
x_data = np.float32(np.random.rand(2, 100))
y_data = np.dot([0.100, 0.200], x_data) + 0.3000
# 构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y_pre = tf.matmul(W, x_data) + b
# 损失函数:最小化方差
loss = tf.reduce_mean(tf.square(y_pre - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 实例化Session,并初始化变量
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# 拟合平面
for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
从训练输出可以到,当训练200轮后,得到了稳定的权重向量w和b。
最终的线性拟合曲线为: $y = 0.10000989x_{0} + 0.2000066x_{1} + 0.29999176$
0 [[ 0.66747683 0.33177963]] [-0.11118987]
20 [[ 0.2787464 0.28042707]] [ 0.17062303]
40 [[ 0.15737668 0.23200317]] [ 0.2553007]
60 [[ 0.11898003 0.21165822]] [ 0.28466448]
80 [[ 0.10637598 0.20409651]] [ 0.294756]
100 [[ 0.10215825 0.20141646]] [ 0.29820964]
120 [[ 0.10073327 0.20048615]] [ 0.29938921]
140 [[ 0.10024957 0.20016627]] [ 0.29979169]
160 [[ 0.10008503 0.20005679]] [ 0.29992896]
180 [[ 0.10002899 0.20001937]] [ 0.29997575]
200 [[ 0.10000989 0.2000066 ]] [ 0.29999176]