手把手教你用 TensorFlow 实战线性回归问题

TensorFlow 实战线性回归问题

线性回归 (Linear Regression) 是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析,用来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。线性回归问题也是机器学习的入门级知识,下面就和小编一起来学习一下用 Python + TensorFlow 如何实现线性回归吧!

1、线性回归方程

单变量的线性回归方程可以表示为:

y=w*x+b

本例我们将通过代码来生成一个人工数据集。随机生成一个近似采样随机分布,使得w=2.0,b=1,并加入一个噪声,噪声的最大振幅为0.4。即方程表示为:

y=2.0*x+1

手把手教你用 TensorFlow 实战线性回归问题

2、人工数据集生成

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
# 设置随机数种子
np.random.seed(5)
#采用np生成等差数列,生成100个点,每个点取值在-1到1之间
x_data = np.linspace(-1,1,100)
# y=2x+1,其中,噪声的维度与x_data一致
y_data = 2*x_data + 1.0 + np.random.randn(*x_data.shape)*0.4

#画出随机生成的数据散点图
plt.scatter(x_data,y_data)

#画出我们想要学习的线性函数y=2x+1
plt.plot(x_data, 2*x_data+1.0, color='red',linewidth=3)

手把手教你用 TensorFlow 实战线性回归问题

3、构建模型

首先定义训练数据的占位符,x 是特征值,y 是标签值

x = tf.placeholder("float",name="x")
y = tf.placeholder("float",name="y")

定义模型函数

def model(x,w,b):
    return tf.multiply(x,w) + b

定义模型结构,创建变量

#构建线性函数斜率,变量w
w = tf.Variable(1.0,name="w0")
#构建线性函数截距,变量b
b = tf.Variable(0.0,name="b0")
#pred是预测值,前向计算
pred = model(x,w,b)

4、训练模型

设置训练参数

#迭代次数
train_epochs = 10
#学习率
learning_rate = 0.05

5、定义损失函数和优化器

损失函数用于描述预测值与真实值之间的误差,从而指导模型的收敛方向

#采用均方差作为损失函数
loss_function = tf.reduce_mean(tf.square(y-pred))

定义优化器,初始化一个 GradientDescentOptimizer
设置学习率和优化目标:最小化损失

#梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

6、创建会话

声明会话

sess = tf.Session()

变量初始化

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

7、迭代训练

模型训练阶段,设置迭代次数,每次通过将样本逐个输入模型,进行梯度下降优化操作,每轮迭代后,绘制出模型曲线
#开始训练,轮数为epoch,采用SGD随机梯度下降方法

for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimzer.loss_function],feed_dict={x:xs,y:ys})
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    plt.plot(x_data,w0temp*x_data+b0temp)

手把手教你用 TensorFlow 实战线性回归问题
从图中可以看出,该例子所拟合的模型较简单,训练 3 次以后已经接近收敛。对于复杂的模型需要更多次的训练才能收敛。

8、训练结果的可视化

plt.scatter(x_data,y_data,label='Original data')
plt.plot(x_data,x_data*sess.run(w)+sess.runn(b),label='Fitted line',color='r')

手把手教你用 TensorFlow 实战线性回归问题
打印结果

print("w: ",sess.run(w)) # w应该在2附近
print("b: ",sess.run(b)) # b应该在1附近

w:1.90116
b:1.02581

注意:数据每次运行都可能有所不同。

9、利用模型进行预测

x_test = 3.21

predict = sess.run(pred,feed_dict={x:x_test})
print("预测值:%f" % predict)
target = 2*x_test + 1.0
print("目标值:%f" % target)

预测值:7.128515
目标值:7.420000

10、小结

采用 TensorFlow 进行算法设计与训练的核心步骤为:

  • 准备数据
  • 构建模型
  • 训练模型
  • 进行预测
    上述步骤是我们使用 TensorFlow 进行算法设计和训练的核心步骤,适应于所有机器学习的项目。

---------End---------

关注后回复“w”,加我私人微信

推荐阅读:
阅读是投资自己最有效的方式
自律是一种觉醒

手把手教你用 TensorFlow 实战线性回归问题

上一篇:tensorflow基本常用操作


下一篇:学习进度tensorflow的线性和逻辑回归