TensorFlow使用线性回归解决特征拟合问题

liang @ 2018年05月21日

线性回归(LinearRegression),顾名思义是一种回归模型,拟合一个带有系数 $w = (w_1, ..., w_p)$ 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为:

$$ \min_{w}||wx - y||_{2}^{2} $$

linear Regression

模型定义

本文旨在使用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]