通俗地讲:给定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去拟合坐标中的观察值,例如图中的3条直线。session
那么,图中的3条直线哪一个能更好地拟合观察值(x,y)呢?以下图所示:咱们能够用观察值到直线的竖直距离的平方(H(x)-y)^2来衡量模型的拟合效果,如图中的损失函数:cost。less
让咱们观察一下这个例子中的损失函数到底长什么样子。以下图所示:cost(W)为平滑可导的凸函数,在w=1处取得最小值。所以,咱们能够经过梯度降低的方法求解使得损失函数达到最小值的W。dom
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 + b
2.计算损失函数函数
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))
完整代码:spa
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))