线性回归
给定X1, X2, ..., Xn,通过模型或算法预测数值Y,即是回归。
例如,预测测试分数:
| x(hours) | y(score) |
|---|---|
| 10 | 90 |
| 9 | 80 |
| 3 | 50 |
| 2 | 30 |
以下面的数据阐述什么是线性回归:
| x | y |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
1.把上述数据中的点(x, y)在坐标中描绘出来,可以发现(x,y)呈线性趋势。
2.试图用一条直线H(x)=wx+b去拟合坐标中的观察值。
我们用观察值到直线的竖直距离的平方(H(x)-y)^2来衡量模型的拟合效果,即损失函数:cost。
损失函数cost(W)为平滑可导的凸函数。因此,我们可以通过梯度下降的方法求解使得损失函数达到最小值的W。
TensorFlow实现线性回归
1.添加线性节点H(x) = Wx + b
# 训练数据集x,y
x_train = [1, 2, 3]
y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# 线性假设 XW + b
hypothesis = x_train * W + b2.计算损失函数
cost = tf.reduce_mean(tf.square(hypothesis - y_train))3.梯度下降
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)4.更新图并获取结果
# 开启session会话
less = tf.Session()
# 初始化全局变量
sess.run(tf.global_variables_initializer())
# 拟合直线
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sets.run(cost), sess.run(W), sets.run(b))完整代码:
import tensorflow as tf
# 训练数据集x,y
x_train = [1, 2, 3]
y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# 线性假设 XW + b
hypothesis = x_train * W + b
# 损失函数
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
# 梯度下降
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
# 开启session会话
sess = tf.Session()
# 初始化全局变量
sess.run(tf.global_variables_initializer())
# 拟合直线
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
评论列表(0条)