通俗地講:給定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))