手把手教你用 TensorFlow 實戰線性迴歸問題

TensorFlow 實戰線性迴歸問題

線性迴歸 (Linear Regression) 是利用稱爲線性迴歸方程的最小平方函數對一個或多個自變量和因變量之間關係進行建模的一種迴歸分析,用來肯定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分普遍。線性迴歸問題也是機器學習的入門級知識,下面就和小編一塊兒來學習一下用 Python + TensorFlow 如何實現線性迴歸吧!算法

一、線性迴歸方程

單變量的線性迴歸方程能夠表示爲:微信

y=w*x+b

本例咱們將經過代碼來生成一我的工數據集。隨機生成一個近似採樣隨機分佈,使得w=2.0,b=1,並加入一個噪聲,噪聲的最大振幅爲0.4。即方程表示爲:session

y=2.0*x+1

手把手教你用 TensorFlow 實戰線性迴歸問題

二、人工數據集生成

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
# 設置隨機數種子
np.random.seed(5)
#採用np生成等差數列,生成100個點,每一個點取值在-1到1之間
x_data = np.linspace(-1,1,100)
# y=2x+1,其中,噪聲的維度與x_data一致
y_data = 2*x_data + 1.0 + np.random.randn(*x_data.shape)*0.4

#畫出隨機生成的數據散點圖
plt.scatter(x_data,y_data)

#畫出咱們想要學習的線性函數y=2x+1
plt.plot(x_data, 2*x_data+1.0, color='red',linewidth=3)

手把手教你用 TensorFlow 實戰線性迴歸問題

三、構建模型

首先定義訓練數據的佔位符,x 是特徵值,y 是標籤值dom

x = tf.placeholder("float",name="x")
y = tf.placeholder("float",name="y")

定義模型函數機器學習

def model(x,w,b):
    return tf.multiply(x,w) + b

定義模型結構,建立變量ide

#構建線性函數斜率,變量w
w = tf.Variable(1.0,name="w0")
#構建線性函數截距,變量b
b = tf.Variable(0.0,name="b0")
#pred是預測值,前向計算
pred = model(x,w,b)

四、訓練模型

設置訓練參數函數

#迭代次數
train_epochs = 10
#學習率
learning_rate = 0.05

五、定義損失函數和優化器

損失函數用於描述預測值與真實值之間的偏差,從而指導模型的收斂方向學習

#採用均方差做爲損失函數
loss_function = tf.reduce_mean(tf.square(y-pred))

定義優化器,初始化一個 GradientDescentOptimizer
設置學習率和優化目標:最小化損失優化

#梯度降低優化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

六、建立會話

聲明會話spa

sess = tf.Session()

變量初始化

init = tf.global_variables_initializer()
sess.run(init)

七、迭代訓練

模型訓練階段,設置迭代次數,每次經過將樣本逐個輸入模型,進行梯度降低優化操做,每輪迭代後,繪製出模型曲線
#開始訓練,輪數爲epoch,採用SGD隨機梯度降低方法

for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimzer.loss_function],feed_dict={x:xs,y:ys})
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    plt.plot(x_data,w0temp*x_data+b0temp)

手把手教你用 TensorFlow 實戰線性迴歸問題
從圖中能夠看出,該例子所擬合的模型較簡單,訓練 3 次之後已經接近收斂。對於複雜的模型須要更屢次的訓練才能收斂。

八、訓練結果的可視化

plt.scatter(x_data,y_data,label='Original data')
plt.plot(x_data,x_data*sess.run(w)+sess.runn(b),label='Fitted line',color='r')

手把手教你用 TensorFlow 實戰線性迴歸問題
打印結果

print("w: ",sess.run(w)) # w應該在2附近
print("b: ",sess.run(b)) # b應該在1附近

w:1.90116
b:1.02581

注意:數據每次運行均可能有所不一樣。

九、利用模型進行預測

x_test = 3.21

predict = sess.run(pred,feed_dict={x:x_test})
print("預測值:%f" % predict)
target = 2*x_test + 1.0
print("目標值:%f" % target)

預測值:7.128515
目標值:7.420000

十、小結

採用 TensorFlow 進行算法設計與訓練的核心步驟爲:

  • 準備數據
  • 構建模型
  • 訓練模型
  • 進行預測
    上述步驟是咱們使用 TensorFlow 進行算法設計和訓練的核心步驟,適應於全部機器學習的項目。

---------End---------

關注後回覆「w」,加我私人微信

推薦閱讀:
閱讀是投資本身最有效的方式
自律是一種覺醒

手把手教你用 TensorFlow 實戰線性迴歸問題

相關文章
相關標籤/搜索