最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年03月05日 10:11:23   作者:universe_ant  
這篇文章主要介紹了運用TensorFlow進行簡單實現(xiàn)線性回歸、梯度下降示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

單變量線性回歸:

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

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

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

單變量線性回歸的模型

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

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

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

舉個實際的例子:

我們想要根據(jù)房子的大小,預(yù)測房子的價格,給定如下數(shù)據(jù)集:

例圖

根據(jù)上面的數(shù)據(jù)集,畫出如下所示的圖:

房價點圖

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

Cost Function:

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

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

Cost Function

但是我們肯定想知道Cost Function的內(nèi)部結(jié)構(gòu)是什么?因此我們給出下面的公式:

cost function

其中:

表示向量x中的第i個元素;

表示向量y中的第i個元素;

表示已知的假設(shè)函數(shù);m表示訓練集的數(shù)量。

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

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

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

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

Gradient Descent(梯度下降):

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

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

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

方法:

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

b) 任意給定一個初始值:;

c) 確定一個向下的方向,并向下走預(yù)定的步伐,并更新;

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

算法:

特點:

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

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

問題1:如果初始值就在local minimum的位置,則、會如何變化?

答案:因為已經(jīng)在local minimum位置,所以derivative肯定是0,因此不會改變。

問題2:如果取到一個正確的值,則cost function應(yīng)該會越來越小。那么,怎么取值?

答案:隨時觀察值,如果cost function變小了,則OK;反之,則再取一個更小的值。

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

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

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

下圖就是overshoot現(xiàn)象:

如果Learning Rate取值后發(fā)現(xiàn)J function增長了,則需要減小Learning Rate的值。

Integrating with Gradient Descent & Linear Regression:

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

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

因此我們能夠?qū)ost Function運用梯度下降,即將梯度下降和線性回歸進行整合,如下圖所示:

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

Feature Scaling:

此種方法應(yīng)用于梯度下降,為了加快梯度下降的執(zhí)行速度。

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

常用的方法是Mean Normalization,即,或者[X-mean(X)]/std(X)。

練習題

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

給定以下訓練集:

我們想對(midterm exam)^2進行feature scaling,則經(jīng)過feature scaling后的值為多少?

解答:其中max = 8836,min = 4761,mean = 6675.5,則 = (4761 - 6675.5)/(8836 - 4761) = -0.47 。

多變量線性回歸

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

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

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

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

Cost Function如下:

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

總練習題

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

(1) 訓練集的個數(shù)?

答:4個。

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

解: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進行簡單的實現(xiàn):

#!/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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你深入理解Python魔法方法

    一文帶你深入理解Python魔法方法

    在Python中,魔法方法是指那些以雙下劃線開頭和結(jié)尾的特殊方法,它們是Python的內(nèi)置方法,對應(yīng)于Python對象的各種運算符,這篇文章將深入探討Python的一些魔法方法,并通過示例展示如何使用它們,需要的朋友可以參考下
    2023-06-06
  • Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié)

    Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié)

    將PDF文件轉(zhuǎn)換為Word文檔的過程通常需要使用一些外部庫來實現(xiàn),因為Python本身并不直接支持這種轉(zhuǎn)換,這篇文章主要介紹了Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié),需要的朋友可以參考下
    2024-06-06
  • Python的Django框架中的數(shù)據(jù)庫配置指南

    Python的Django框架中的數(shù)據(jù)庫配置指南

    這篇文章主要介紹了Python的Django框架中的數(shù)據(jù)庫配置指南,文中舉了Python內(nèi)置的SQLite的示例,需要的朋友可以參考下
    2015-07-07
  • python腳本框架webpy入門安裝及應(yīng)用創(chuàng)建

    python腳本框架webpy入門安裝及應(yīng)用創(chuàng)建

    這篇文章主要為大家介紹了python腳本框架web.py的入門安裝及應(yīng)用創(chuàng)建過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Python關(guān)于時間序列calendar模塊的深入講解

    Python關(guān)于時間序列calendar模塊的深入講解

    calendar,是與日歷相關(guān)的模塊。calendar模塊文件里定義了很多類型,主要有Calendar,TextCalendar以及HTMLCalendar類型。其中,Calendar是TextCalendar與HTMLCalendar的基類
    2021-11-11
  • Python合并2個字典成1個新字典的方法(9種)

    Python合并2個字典成1個新字典的方法(9種)

    這篇文章主要介紹了Python合并2個字典成1個新字典的方法,本文通過實例代碼給大家分享9中方法,需要的朋友可以參考下
    2019-12-12
  • python如何獲取網(wǎng)絡(luò)數(shù)據(jù)

    python如何獲取網(wǎng)絡(luò)數(shù)據(jù)

    這篇文章主要介紹了python如何獲取網(wǎng)絡(luò)數(shù)據(jù),幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • linux centos 7.x 安裝 python3.x 替換 python2.x的過程解析

    linux centos 7.x 安裝 python3.x 替換 python2.x的過程解析

    這篇文章主要介紹了linux centos 7.x 安裝 python3.x 替換 python2.x的過程解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • python批量修改ssh密碼的實現(xiàn)

    python批量修改ssh密碼的實現(xiàn)

    這篇文章主要介紹了python批量修改ssh密碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python?requirements.txt的具體使用

    Python?requirements.txt的具體使用

    requirements.txt文件是項目的依賴包及其對應(yīng)版本號的信息列表,本文主要介紹了Python?requirements.txt的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

奉新县| 谢通门县| 天水市| 深水埗区| 抚顺县| 望江县| 上栗县| 肇州县| 天津市| 永寿县| 连城县| 乐东| 彭州市| 于都县| 延长县| 宜春市| 当雄县| 曲阜市| 乌兰县| 望都县| 双桥区| 中超| 卢氏县| 西林县| 三江| 襄城县| 大渡口区| 科技| 寻乌县| 井冈山市| 尉氏县| 施秉县| 孟连| 石泉县| 六枝特区| 嘉义市| 宜川县| 象山县| 建平县| 深水埗区| 定结县|