'''
用梯度下降的优化方法来快速解决线性回归问题
'''
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 构建数据
points_num = 100
vectors = []
# 用numpy的正态随机分布函数生成100个点,这些点的(x,y)坐标值对应线性方程y = 0.1*x + 0.2
# 权重(Weight)是0.1,偏差(Bias)是0.2
for i in range(points_num):
x1 = np.random.normal(0.0, 0.66)
y1 = 0.1 * x1 + 0.2 + np.random.normal(0.0, 0.04)
vectors.append([x1,y1])
x_data = [v[0] for v in vectors] # 真实的点的x坐标
y_data = [v[1] for v in vectors] # 真实的点的y坐标
# 图像1 :展示所有的随机数据点
plt.plot(x_data, y_data, 'r*', label="Original data")
plt.title("Linear Regression using Gradient Descent")
plt.legend()
plt.show()
# 构建线性回归模型
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) # 初始化Weight
# tf.random_uniform((4, 4), minval=low, maxval=high)返回4*4的矩阵,产生于low和high之间,产生的值是均匀分布的。
b = tf.Variable(tf.zeros([1])) # 初始化Bias
y = W * x_data + b # 模型计算出的y
# 定义 loss function(损失函数) 或 cost function(代价函数)
# 对 Tensor 的所有维度 计算((y - y_data)^2)之和 / N
loss = tf.reduce_mean(tf.square(y - y_data))
# tf.reduce_mean 计算所有维度的平均值
# 用梯度下降的优化器来优化 loss function
optimizer = tf.train.GradientDescentOptimizer(0.5) # 设置学习率 0.5
train = optimizer.minimize(loss)
# 创建会话
with tf.Session() as sess:
init = tf.global_variables_initializer() # 初始化数据流图中的所有变量
sess.run(init)
# 训练20步
for step in range(20):
sess.run(train) # 优化每一步
print("Step=%d, Loss=%f, [Weight=%f Bias=%f]" % (step, sess.run(loss), sess.run(W), sess.run(b)))
# 图像2: 绘制所有的点并且绘制出最佳拟合的直线
x_data = [v[0] for v in vectors] # 真实的点的x坐标
y_data = [v[1] for v in vectors] # 真实的点的y坐标
# 图像1 :展示所有的随机数据点
plt.plot(x_data, y_data, 'r*', label="Original data")
plt.title("Linear Regression using Gradient Descent")
plt.plot(x_data, sess.run(W) * x_data + sess.run(b), label="Fitted line")
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()
梯度下降法解决线性回归
猜你喜欢
转载自blog.csdn.net/zhaohaibo_/article/details/80629304
今日推荐
周排行