梯度下降解决线性回归问题

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y= w’x+e,e为误差服从均值为0的正态分布。
线性回归一般用于预测,比如价格涨跌、通过曲线图预测之后的变化等等。梯度下降是机器学习中最核心的优化算法,用来递归性地逼近最小偏差模型。
首先用Numpy的正态随机分布函数创建100个坐标点,把这些点赋值在vectors的向量里,向量是列表的形式。其中线性方程w为0.5,bias为0.2。

points_num = 100
vectors = []

for i in range(points_num):
    x1 = np.random.normal(0.0, 0.5)
    y1 = 0.5 * x1 + 0.2 + np.random.normal(0.0, 0.04)
    vectors.append([x1, y1])

然后创建x_data,y_data,是刚刚创建的vector的x和y的真实值。

x_data = [v[0] for v in vectors]
y_data = [v[1] for v in vectors]

用matlotlib打印出这些点,其中’*r’为点的形状,r为红色,形状可用’o’,’.’等等。

plt.plot(x_data, y_data, 'r*', label="data1")
plt.title("Test")
plt.legend()
plt.show()

这里写图片描述

接下来构建线性回归模型,找到一条最佳拟合的直线,根据这条直线给定x值就可以预测出相应的y值。也就是W和Bias接近我们一开始设的初始值。

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
b = tf.Variable(tf.zeros([1]))                   
y = W * x_data + b     

W是构建的权重,形状是1,最大值和最小值分别是1和-1,生成的值在[-1,1) 范围内遵循均匀分布。b是要训练出的偏差,y是模型计算出的值。

定义损失函数Loss function(代价函数 cost function),对tensor的所有维度都计算(y- y_data)的平方值。再除以个数100。然后用梯度下降的优化器来优化损失函数。

loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5) 
train = optimizer.minimize(loss)

创建回话并进行训练。

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for step in xrange(20):
    sess.run(train)

绘制图像,绘制出最佳拟合的直线。

plt.plot(x_data, y_data, 'r*', label="data2") 
plt.title("Test2")
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()

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值