国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

運用TensorFlow進行簡單實現線性回歸、梯度下降示例

2020-01-04 15:45:55
字體:
來源:轉載
供稿:網友

線性回歸屬于監督學習,因此方法和監督學習應該是一樣的,先給定一個訓練集,根據這個訓練集學習出一個線性函數,然后測試這個函數訓練的好不好(即此函數是否足夠擬合訓練集數據),挑選出最好的函數(cost function最小)即可。

單變量線性回歸:

a) 因為是線性回歸,所以學習到的函數為線性函數,即直線函數;

b) 因為是單變量,因此只有一個x。

我們能夠給出單變量線性回歸的模型:

TensorFlow,線性回歸,梯度下降

我們常稱x為feature,h(x)為hypothesis。

上面介紹的方法中,我們肯定有一個疑問,怎樣能夠看出線性函數擬合的好不好呢?

所以此處,我們需要使用到Cost Function(代價函數),代價函數越小,說明線性回歸也越好(和訓練集合擬合的越好),當然最小就是0,即完全擬合。

舉個實際的例子:

我們想要根據房子的大小,預測房子的價格,給定如下數據集:

TensorFlow,線性回歸,梯度下降

根據上面的數據集,畫出如下所示的圖:

TensorFlow,線性回歸,梯度下降

我們需要根據這些點擬合出一條直線,使得Cost Function最小。雖然現在我們還不知道Cost Function內部到底是什么樣的,但是我們的目標是:給定輸入向量x,輸出向量y,theta向量,輸出Cost值。

Cost Function:

Cost Function的用途:對假設的函數進行評價,Cost Function越小的函數,說明對訓練數據擬合的越好。

下圖詳細說明了當Cost Function為黑盒的時候,Cost Function的作用:

TensorFlow,線性回歸,梯度下降

但是我們肯定想知道Cost Function的內部結構是什么?因此我們給出下面的公式:

TensorFlow,線性回歸,梯度下降

其中:

TensorFlow,線性回歸,梯度下降表示向量x中的第i個元素;

TensorFlow,線性回歸,梯度下降表示向量y中的第i個元素;

TensorFlow,線性回歸,梯度下降表示已知的假設函數;m表示訓練集的數量。

TensorFlow,線性回歸,梯度下降

如果theta0一直為0,則theta1與J的函數為:

TensorFlow,線性回歸,梯度下降

如果theta0和theta1都不固定,則theta0、theta1、J的函數為:

TensorFlow,線性回歸,梯度下降

當然我們也能夠用二維的圖來表示,即等高線圖:

TensorFlow,線性回歸,梯度下降

注意如果是線性回歸,則cost function一定是碗狀的,即只有一個最小點。

Gradient Descent(梯度下降):

但是又一個問題引出來了,雖然給定一個函數,我們能夠根據cost function知道這個函數擬合的好不好,但是畢竟函數有這么多,總不能一個一個試吧?

于是我們引出了梯度下降:能夠找出cost function函數的最小值。(當然解決問題的方法有很多,梯度下降只是其中一個,還有一種方法叫Normal Equation)。

梯度下降的原理:將函數比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快。

方法:

a) 先確定向下一步的步伐大小,我們稱為learning rate;

b) 任意給定一個初始值:TensorFlow,線性回歸,梯度下降TensorFlow,線性回歸,梯度下降;

c) 確定一個向下的方向,并向下走預定的步伐,并更新TensorFlow,線性回歸,梯度下降TensorFlow,線性回歸,梯度下降

d) 當下降的高度小于某個定義的值,則停止下降。

算法:

TensorFlow,線性回歸,梯度下降

特點:

a)初始點不同,獲得的最小值也不同,因此梯度下降求得的只是局部最小值;

b)越接近最小值,下降速度越慢。

問題1:如果TensorFlow,線性回歸,梯度下降TensorFlow,線性回歸,梯度下降初始值就在local minimum的位置,則TensorFlow,線性回歸,梯度下降、TensorFlow,線性回歸,梯度下降會如何變化?

答案:因為TensorFlow,線性回歸,梯度下降TensorFlow,線性回歸,梯度下降已經在local minimum位置,所以derivative肯定是0,因此TensorFlow,線性回歸,梯度下降TensorFlow,線性回歸,梯度下降不會改變。

問題2:如果取到一個正確的TensorFlow,線性回歸,梯度下降值,則cost function應該會越來越小。那么,怎么取TensorFlow,線性回歸,梯度下降值?

答案:隨時觀察TensorFlow,線性回歸,梯度下降值,如果cost function變小了,則OK;反之,則再取一個更小的值。

下圖就詳細說明了梯度下降的過程:

TensorFlow,線性回歸,梯度下降

從上圖中可以看出:初始點不同,獲得的最小值也不同,因此,梯度下降求得的只是局部最小值。

注意:下降的步伐大小非常重要,因為,如果太小,則找到函數最小值的速度就很慢;如果太大,則可能會出現overshoot the minimum現象。

下圖就是overshoot現象:

TensorFlow,線性回歸,梯度下降

如果Learning Rate取值后發現J function增長了,則需要減小Learning Rate的值。

Integrating with Gradient Descent & Linear Regression:

梯度下降能夠求出一個函數的最小值。

線性回歸需要求得最小的Cost Function。

因此我們能夠對Cost Function運用梯度下降,即將梯度下降和線性回歸進行整合,如下圖所示:

TensorFlow,線性回歸,梯度下降

梯度下降是通過不停的迭代,而我們比較關注迭代的次數,因為這關系到梯度下降的執行速度,為了減少迭代次數,因此引入了Feature Scaling。

Feature Scaling:

此種方法應用于梯度下降,為了加快梯度下降的執行速度。

思想:將各個feature的值標準化,使得取值范圍大致都在-1<=x<=1之間。

常用的方法是Mean Normalization,即TensorFlow,線性回歸,梯度下降,或者[X-mean(X)]/std(X)。

TensorFlow,線性回歸,梯度下降

練習題

我們想要通過期中考試成績預測期末考試成績,我們希望得到的方程為:

TensorFlow,線性回歸,梯度下降

給定以下訓練集:

TensorFlow,線性回歸,梯度下降

我們想對(midterm exam)^2進行feature scaling,則TensorFlow,線性回歸,梯度下降經過feature scaling后的值為多少?

解答:其中max = 8836,min = 4761,mean = 6675.5,則TensorFlow,線性回歸,梯度下降 = (4761 - 6675.5)/(8836 - 4761) = -0.47 。

多變量線性回歸

前面我們只介紹了單變量的線性回歸,即只有一個輸入變量,現實世界可不只是這么簡單,因此此處我們要介紹多變量的線性回歸。

舉個例子:房價其實受很多因素決定,比如size、number of bedrooms、number of floors、age of home等,這里我們假設房價由4個因素決定,如下圖所示:

TensorFlow,線性回歸,梯度下降

我們前面定義過單變量線性回歸的模型:

TensorFlow,線性回歸,梯度下降

這里我們可以定義出多變量線性回歸的模型:

TensorFlow,線性回歸,梯度下降

Cost Function如下:

TensorFlow,線性回歸,梯度下降

如果下面我們要用梯度下降解決多變量的線性回歸,則我們還是可以用傳統的梯度下降算法進行計算:

TensorFlow,線性回歸,梯度下降

總練習題

我們想要根據一個學生第一年的成績預測第二年的成績,x為第一年得到A的數量,y為第二年得到A的數量,給定以下數據集:

TensorFlow,線性回歸,梯度下降

(1) 訓練集的個數?

答:4個。

(2) J(0, 1)的結果是多少?

解:J(0,1) = 1/(2*4)*[(3-4)^2+(2-1)^2+(4-3)^2+(0-1)^2] = 1/8*(1+1+1+1) = 1/2 = 0.5。

我們也可以通過vectorization的方法快速算出J(0, 1):

TensorFlow,線性回歸,梯度下降

下面是通過TensorFlow進行簡單的實現:

#!/usr/bin/env python  from __future__ import print_function  import tensorflow as tf import numpy as np  trX = np.linspace(-1, 1, 101) # create a y value which is approximately linear but with some random noise trY = 2 * trX + /   np.ones(*trX.shape) * 4 + /   np.random.randn(*trX.shape) * 0.03  X = tf.placeholder(tf.float32) # create symbolic variables Y = tf.placeholder(tf.float32)  def model(X, w, b):   # linear regression is just X*w + b, so this model line is pretty simple   return tf.mul(X, w) + b   # create a shared for weight s w = tf.Variable(0.0, name="weights") # create a variable for biases b = tf.Variable(0.0, name="biases") y_model = model(X, w, b)  cost = tf.square(Y - y_model) # use square error for cost function  # construct an optimizer to minimize cost and fit line to mydata train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)  # launch the graph in a session with tf.Session() as sess:   # you need to initialize variables (in this case just variable w)   init = tf.initialize_all_variables()   sess.run(init)    # train   for i in range(100):     for (x, y) in zip(trX, trY):       sess.run(train_op, feed_dict={X: x, Y: y})    # print weight   print(sess.run(w)) # it should be something around 2   # print bias   print(sess.run(b)) # it should be something atound 4 

參考:

TensorFlow線性回歸Demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永泰县| 枣庄市| 郁南县| 延吉市| 开鲁县| 德清县| 得荣县| 文水县| 固安县| 吉林市| 玉门市| 新邵县| 中江县| 双城市| 芦山县| 肃宁县| 扎兰屯市| 昌吉市| 海伦市| 博湖县| 临汾市| 旌德县| 郑州市| 莱州市| 关岭| 黔西| 杭锦旗| 保山市| 古田县| 临城县| 行唐县| 合江县| 南京市| 普陀区| 和田县| 沭阳县| 闵行区| 柞水县| 乡城县| 广水市| 朝阳县|