偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

初學(xué)TensorFlow機器學(xué)習(xí):如何實現(xiàn)線性回歸?

開發(fā) 開發(fā)工具 機器學(xué)習(xí)
在本文中,你將學(xué)習(xí)如何用回歸來解決一個實際問題。你將看到,如果你想擁有最強大的預(yù)測器,TensorFlow 工具將是正確的選擇。

TensorFlow 入門級文章:小白也能看懂的TensorFlow介紹

還記得你小學(xué)時學(xué)習(xí)的科學(xué)課程嗎?也許就在不久前,誰知道呢——也許你正在上小學(xué),但是已經(jīng)早早開始了你的機器學(xué)習(xí)之旅。不管是哪種方式,不管是生物、化學(xué)或者物理,一種分析數(shù)據(jù)的常用技術(shù)是用繪圖來觀察一個變量的變化對其它變量的影響。

設(shè)想你要繪制降雨頻率與農(nóng)作物產(chǎn)量間的相關(guān)性圖。你也許會觀察到隨著降雨量的增加農(nóng)業(yè)生產(chǎn)率也會增加。通過對這些數(shù)據(jù)擬合一條線,你可以預(yù)測不同降雨條件下的農(nóng)業(yè)生產(chǎn)率。如果你能夠從幾個數(shù)據(jù)點發(fā)現(xiàn)隱式函數(shù)關(guān)系,那么你就可以利用此學(xué)習(xí)到的函數(shù)來預(yù)測未知數(shù)據(jù)的值。

回歸算法研究的是如何最佳擬合概括數(shù)據(jù)的曲線。它是有監(jiān)督學(xué)習(xí)算法中最強大和被研究最多的一類算法。在回歸中,我們嘗試通過找到可能生成數(shù)據(jù)的曲線來理解數(shù)據(jù)。通過這樣做,我們?yōu)榻o定數(shù)據(jù)散點的分布原因找到了一種解釋。最佳擬合曲線給出了一個解釋數(shù)據(jù)集是如何生成的模型。

在本文中,你將學(xué)習(xí)如何用回歸來解決一個實際問題。你將看到,如果你想擁有最強大的預(yù)測器,TensorFlow 工具將是正確的選擇。

基本概念

如果你有工具,那么干什么事情都會很容易。我將演示第一個重要的機器學(xué)習(xí)工具——回歸(regression),并給出精確的數(shù)學(xué)表達式。首先,你在回歸中學(xué)習(xí)到的很多技能會幫助你解決可能遇到的其它類型的問題。讀完本文,回歸將成為你的機器學(xué)習(xí)工具箱中的得力工具。

假設(shè)我們的數(shù)據(jù)記錄了人們在每瓶啤酒瓶上花多少錢。A 花了 2 美元 1 瓶,B 花了 4 美元 2 瓶,C 花了 6 美元 3 瓶。我們希望找到一個方程,能夠描述啤酒的瓶數(shù)如何影響總花費。例如,如果每瓶啤酒都花費 2 美元,則線性方程 y=2x 可以描述購買特定數(shù)量啤酒的花費。

當(dāng)一條線能夠很好的擬合一些數(shù)據(jù)點時,我們可以認為我們的線性模型表現(xiàn)良好。實際上,我們可以嘗試許多可能的斜率,而不是固定選擇斜率值為 2。斜率為參數(shù),產(chǎn)生的方程為模型。用機器學(xué)習(xí)術(shù)語來說,最佳擬合曲線的方程來自于學(xué)習(xí)模型的參數(shù)。

另一個例子,方程 y=3x 也是一條直線,除了具有更陡的斜率。你可以用任何實數(shù)替換該系數(shù),這個系數(shù)稱為 w,方程仍為一條直線:y=wx。圖 1 顯示了改變參數(shù) w 如何影響模型。我們將這種方式生成的所有方程的集合表示為 M={ y=wx | w∈ℝ}。

這個集合表示「所有滿足 y=wx 的方程,其中 w 是實數(shù)」。

參數(shù) w 的不同值代表不同的線性方程

圖 1.

圖 1:參數(shù) w 的不同值代表不同的線性方程。所有這些線性方程的集合構(gòu)成線性模型 M。

M 是所有可能的模型的集合。每選定一個 w 的值就會生成候選模型 M(w):y=wx。在 TensorFlow 中編寫的回歸算法將迭代收斂到更好的模型參數(shù) w。我們稱最佳參數(shù)為 w*,最佳擬合方程為 M(w*):y=w*x。

本質(zhì)上,回歸算法嘗試設(shè)計一個函數(shù)(讓我們將其稱為 f),將輸入映射到輸出。函數(shù)的域是一個實數(shù)向量 ℝd,其范圍是實數(shù)集 ℝ。函數(shù)的輸入可以是連續(xù)的或離散的。然而,輸出必須是連續(xù)的,如圖 2 所示。

圖 2.

圖 2:回歸算法是為了產(chǎn)生連續(xù)的輸出。輸入允許是離散的或連續(xù)的。這種區(qū)別是重要的,因為離散的輸出值能更適合分類問題,我們將在下一章中討論這個問題。

附帶說明,回歸的預(yù)測值為連續(xù)輸出,但有時這是過度的。有時我們只想預(yù)測一個離散的輸出,例如 0 或 1(0 和 1 之間不產(chǎn)生任何數(shù)值)。分類是一種更適合這類任務(wù)的技術(shù)。

我們希望找到與給定數(shù)據(jù)(即是輸入/輸出數(shù)據(jù)對)相一致的函數(shù) f。不幸的是,可能的函數(shù)的數(shù)量是無限的,所以我們不能一個一個地嘗試。有太多的選擇通常并不是一件好事。需要縮小我們要處理的所有函數(shù)的范圍。例如,若我們僅查找擬合數(shù)據(jù)的直線(不包含曲線),則搜索將變得更加容易。

  • 練習(xí) 1:將 10 個整數(shù)映射到 10 個整數(shù)的所有可能函數(shù)有多少?例如,令 f(x) 是輸入變量取數(shù)字 0 到 9 且輸出為數(shù)字 0 到 9 的函數(shù)。例如模擬其輸入的恒等函數(shù)(identity function),如 f(0)=0,f(1)=1,依此類推。還存在多少其它的函數(shù)?
  • 答案:10^10=10000000000

如何判斷回歸算法可行?

假設(shè)我們正在向房地產(chǎn)公司兜售房地產(chǎn)市場預(yù)測算法。該算法在給定一些如臥室數(shù)量、公寓面積等房屋屬性后能夠預(yù)測房產(chǎn)的價格。房地產(chǎn)公司可以利用房價信息輕松地賺取數(shù)百萬美元,但是在購買算法之前他們需要一些算法可行的證據(jù)。

衡量訓(xùn)練后的算法是否成功有兩個重要指標:方差(variance)和偏差(bias)。

方差反映的是預(yù)測值對于訓(xùn)練集的敏感度(波動)。我們希望在理想情況下,訓(xùn)練集的選擇對結(jié)果影響很小——意味著需要較小的方差值。

偏差代表了訓(xùn)練集假設(shè)的可信度。太多的假設(shè)可能會難以泛化,所以也需要較小的偏差值。

一方面,過于靈活的模型可能導(dǎo)致模型意外地記住訓(xùn)練集,而不是發(fā)現(xiàn)有用的模式特征。你可以想象一個彎曲的函數(shù)經(jīng)過數(shù)據(jù)集的每個點而不產(chǎn)生錯誤。如果發(fā)生這種情況,我們說學(xué)習(xí)算法對訓(xùn)練數(shù)據(jù)過擬合。在這種情況下,最佳擬合曲線將很好地擬合訓(xùn)練數(shù)據(jù);然而,當(dāng)用測試集進行評估時,結(jié)果可能非常糟糕(參見圖 3)。

最佳擬合曲線

圖 3

圖 3: 理想情況下,最佳擬合曲線同時適用于訓(xùn)練集和測試集。然而,如果看到測試集的表現(xiàn)比訓(xùn)練集更好,那么我們的模型有可能欠擬合。相反,如果在測試集上表現(xiàn)不佳,而對訓(xùn)練集表現(xiàn)良好,那么我們的模型是過擬合的。

另一方面,不那么靈活的模型可以更好地概括未知的測試數(shù)據(jù),但是在訓(xùn)練集上表現(xiàn)欠佳。這種情況稱為欠擬合。一個過于靈活的模型具有高方差和低偏差,而一個不靈活的模型具有低方差和高偏差。理想情況下,我們想要一個具有低方差誤差和低偏差誤差的模型。這樣一來,它們就能夠概括未知的數(shù)據(jù)并捕獲數(shù)據(jù)的規(guī)律性。參見圖 4 的例子。

數(shù)據(jù)欠擬合和過擬合的例子

圖 4. 數(shù)據(jù)欠擬合和過擬合的例子。

具體來說,模型的方差是衡量響應(yīng)的波動程度有多大的一個標準,偏差是響應(yīng)與實際數(shù)據(jù)相差的程度。最后,希望模型達到準確(低偏差)和可重復(fù)(低方差)的效果。

  • 練習(xí) 2:假設(shè)我們的模型為 M(w):y=wx。如果權(quán)重 w 的值必須為 0-9 之間的整數(shù),則有多少個可能的函數(shù)?
  • 答案:只有 10 種情況,即 { y=0,y=x,y=2x,...,y=9x }。

為了評估機器學(xué)習(xí)模型,我們將數(shù)據(jù)集分為兩組:訓(xùn)練集和測試集。訓(xùn)練集用來學(xué)習(xí)模型,測試集用來評估性能。存在很多可能的權(quán)重參數(shù),但我們的目標是找到最適合數(shù)據(jù)的權(quán)重。用來衡量「最適合」的方式是定義成本函數(shù)(cost function)。

線性回歸

讓我們利用模擬數(shù)據(jù)來進行線性回歸。創(chuàng)建一個名為 regression.py 的 Python 源文件,并按照列表 1 初始化數(shù)據(jù)。代碼將產(chǎn)生類似于圖 5 的輸出。

列表 1:可視化原始輸入

  1. import numpy as np  //#Aimport matplotlib.pyplot as plt  //#B 
  2.  
  3. x_train = np.linspace(-1, 1, 101)  //#C 
  4. y_train = 2 * x_train + np.random.randn(*x_train.shape) * 0.33  //#D 
  5.  
  6. plt.scatter(x_train, y_train)  //#E 
  7. plt.show()  //#E 
  • # A:導(dǎo)入 NumPy 包,用來生成初始化的原始數(shù)據(jù)
  • # B:使用 matplotlib 可視化數(shù)據(jù)
  • # C:輸入值為 -1 到 1 之間的 101 個均勻間隔的數(shù)字
  • # D:生成輸出值,與輸入值成正比并附加噪聲
  • # E:使用 matplotlib 的函數(shù)繪制散點圖

散點圖 y=x+ε,ε 為噪聲

圖 5. 散點圖 y=x+ε,ε 為噪聲。

現(xiàn)在你可以利用這些數(shù)據(jù)點嘗試擬合一條直線。在 TensorFlow 中,你至少需要為嘗試的每個候選參數(shù)打分。該打分通常稱為成本函數(shù)。成本函數(shù)值越高,模型參數(shù)越差。例如,如果最佳擬合直線為 y=2x,選擇參數(shù)值為 2.01 時應(yīng)該有較低的成本函數(shù)值,但是選擇參數(shù)值為 -1 時應(yīng)該具有較高的成本函數(shù)值。

這時,我們的問題就轉(zhuǎn)化為最小化成本函數(shù)值,如圖 6 所示,TensorFlow 試圖以有效的方式更新參數(shù),并最終達到最佳的可能值。每個更新所有參數(shù)的步驟稱為 epoch。

TensorFlow 試圖以有效的方式更新參數(shù)

圖 6

圖 6:無論哪個參數(shù) w,最優(yōu)的成本函數(shù)值都是最小的。成本函數(shù)的定義是真實值與模型響應(yīng)之間的誤差的范數(shù)(norm,可以是 2 次方、絕對值、3 次方……)。最后,響應(yīng)值由模型的函數(shù)計算得出。

在本例中,成本函數(shù)定義為誤差的和(sum of errors)。通常用實際值 f(x) 與預(yù)測值 M(w,x) 之間的平方差來計算預(yù)測 x 的誤差。因此,成本函數(shù)值是實際值和預(yù)測值之間的平方差之和,如圖 7 所示。

成本函數(shù)值是模型響應(yīng)與真實值之間的逐點差異的范數(shù)

圖 7. 成本函數(shù)值是模型響應(yīng)與真實值之間的逐點差異的范數(shù)。

更新列表 1 中的代碼,見列表 2。該代碼定義了成本函數(shù),并要求 TensorFlow 運行(梯度下降)優(yōu)化來找到最佳的模型參數(shù)。

列表 2:求解線性回歸

  1. import tensorflow as tf  //#Aimport numpy as np  //#Aimport matplotlib.pyplot as plt   //#A 
  2.  
  3. learning_rate = 0.01  //#B 
  4. training_epochs = 100  //#B 
  5.  
  6. x_train = np.linspace(-1, 1, 101)  //#C 
  7. y_train = 2 * x_train + np.random.randn(*x_train.shape) * 0.33  //#C 
  8.  
  9. X = tf.placeholder("float")  //#D 
  10. Y = tf.placeholder("float")  //#Ddef model(X, w):  //#E    return tf.multiply(X, w) 
  11.  
  12. w = tf.Variable(0.0, name="weights")  //#F 
  13.  
  14. y_model = model(X, w)  //#G 
  15. cost = tf.square(Y-y_model)  //#G 
  16.  
  17. train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)  //#H 
  18.  
  19. sess = tf.Session()  //#I 
  20. init = tf.global_variables_initializer()  //#I 
  21. sess.run(init)  //#Ifor epoch in range(training_epochs):  //#J   for (x, y) in zip(x_train, y_train):  //#K 
  22.       sess.run(train_op, feed_dict={X: x, Y: y})  //#L 
  23.  
  24. w_val = sess.run(w)  //#M 
  25.  
  26. sess.close() //#N 
  27. plt.scatter(x_train, y_train)  //#O 
  28. y_learned = x_train*w_val  //#P 
  29. plt.plot(x_train, y_learned, 'r')  //#P 
  30. plt.show()  //#P 
  • #A:載入 TensorFlow 包用于學(xué)習(xí)算法,載入 NumPy 包來設(shè)置初始數(shù)據(jù),載入 matplotlib 包來可視化數(shù)據(jù)
  • #B:定義學(xué)習(xí)算法使用的一些常數(shù),稱為超參數(shù)
  • #C:初始化線性模擬數(shù)據(jù)
  • #D:將輸入和輸出節(jié)點設(shè)置為占位符,而真實數(shù)值將傳入 x_train 和 y_train
  • #E:將模型定義為 y=w*x
  • #F:設(shè)置權(quán)重變量
  • #G:定義成本函數(shù)
  • #H:定義在學(xué)習(xí)算法的每次迭代中將被調(diào)用的操作
  • #I:設(shè)置會話并初始化所有變量
  • #J:多次循環(huán)遍歷數(shù)據(jù)集
  • #K:循環(huán)遍歷數(shù)據(jù)集中的每個數(shù)據(jù)
  • #L:更新模型參數(shù)以嘗試最小化成本函數(shù)
  • #M:得到最終參數(shù)值
  • #N:關(guān)閉會話
  • #O:繪制原始數(shù)據(jù)
  • #P:繪制最佳擬合直線

恭喜你使用 TensorFlow 解決了線性回歸!另外,只需要對列表 2 稍加修改就能解決回歸中的其它問題。整個流程包括使用 TensorFlow 更新模型參數(shù),如圖 8 所示。

學(xué)習(xí)算法更新模型的參數(shù)以最小化給定的成本函數(shù)

圖 8. 學(xué)習(xí)算法更新模型的參數(shù)以最小化給定的成本函數(shù)。 

原文:https://machinelearning.technicacuriosa.com/2017/04/22/machine-learning-with-tensorflow/

【本文是51CTO專欄機構(gòu)機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2014-08-22 10:06:46

機器學(xué)習(xí)

2020-12-19 10:54:25

機器學(xué)習(xí)線性回歸算法

2020-12-20 20:31:56

Python機器學(xué)習(xí)多元線性回歸

2020-11-10 08:37:05

Python線性回歸機器學(xué)習(xí)

2020-07-01 08:48:01

Python機器學(xué)習(xí)工具

2021-11-02 09:40:50

TensorFlow機器學(xué)習(xí)人工智能

2014-06-30 10:58:02

機器學(xué)習(xí)

2021-11-08 22:59:04

機器學(xué)習(xí)

2024-03-01 07:26:49

RustPolars機器學(xué)習(xí)

2020-05-28 07:15:00

機器學(xué)習(xí)TensorFlow人工智能

2018-03-15 11:50:53

機器學(xué)習(xí)入門Tensorflow

2024-10-22 10:23:58

2017-05-25 11:14:21

機器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2017-05-25 13:37:46

機器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2017-10-24 14:32:48

2017-05-12 16:25:44

深度學(xué)習(xí)圖像補全tensorflow

2021-09-24 16:30:28

無代碼低代碼機器學(xué)習(xí)

2018-12-29 08:00:00

機器學(xué)習(xí)TensorFlowKubeflow

2017-09-01 13:19:21

機器學(xué)習(xí)Logostic回歸

2017-06-14 17:18:43

機器學(xué)習(xí)數(shù)據(jù)研究回歸
點贊
收藏

51CTO技術(shù)棧公眾號