線性迴歸 (Linear Regression) 是利用稱爲線性迴歸方程的最小平方函數對一個或多個自變量和因變量之間關係進行建模的一種迴歸分析,用來肯定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分普遍。線性迴歸問題也是機器學習的入門級知識,下面就和小編一塊兒來學習一下用 Python + TensorFlow 如何實現線性迴歸吧!算法
單變量的線性迴歸方程能夠表示爲:微信
y=w*x+b
本例咱們將經過代碼來生成一我的工數據集。隨機生成一個近似採樣隨機分佈,使得w=2.0,b=1,並加入一個噪聲,噪聲的最大振幅爲0.4。即方程表示爲:session
y=2.0*x+1
%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)
首先定義訓練數據的佔位符,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)
從圖中能夠看出,該例子所擬合的模型較簡單,訓練 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')
打印結果
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 進行算法設計與訓練的核心步驟爲:
---------End---------
關注後回覆「w」,加我私人微信
推薦閱讀:
閱讀是投資本身最有效的方式
自律是一種覺醒