吳恩達機器學習-可選實驗室-梯度下降-Gradient Descent for Linear Regression

文章目錄

    • 目標
    • 工具
    • 問題陳述
    • 計算損失
    • 梯度下降總結
    • 執行梯度下降
    • 梯度下降法
    • 成本與梯度下降的迭代
    • 預測
    • 繪制
    • 祝賀

在這里插入圖片描述

目標

在本實驗中,你將:使用梯度下降自動化優化w和b的過程

工具

在本實驗中,我們將使用:

  • NumPy,一個流行的科學計算庫
  • Matplotlib,一個用于繪制數據的流行庫在本地目錄的
  • lab_utils.py文件中繪制例程
import math, copy
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
from lab_utils_uni import plt_house_x, plt_contour_wgrad, plt_divergence, plt_gradients

當前jupyter note工作目錄需要包含:
在這里插入圖片描述

問題陳述

讓我們使用和之前一樣的兩個數據點——一個1000平方英尺的房子賣了30萬美元,一個2000平方英尺的房子賣了50萬美元。
在這里插入圖片描述

# Load our data set
x_train = np.array([1.0, 2.0])   #features
y_train = np.array([300.0, 500.0])   #target value

計算損失

這是上一個實驗室開發的。我們這里還會用到它

#Function to calculate the cost
def compute_cost(x, y, w, b):m = x.shape[0] cost = 0for i in range(m):f_wb = w * x[i] + bcost = cost + (f_wb - y[i])**2total_cost = 1 / (2 * m) * costreturn total_cost

梯度下降總結

線性模型:f(x)=wx+b
損失函數:J(w,b)
在這里插入圖片描述
參數更新:
在這里插入圖片描述

執行梯度下降

在這里插入圖片描述
在這里插入圖片描述

def compute_gradient(x, y, w, b): """Computes the gradient for linear regression Args:x (ndarray (m,)): Data, m examples y (ndarray (m,)): target valuesw,b (scalar)    : model parameters  Returnsdj_dw (scalar): The gradient of the cost w.r.t. the parameters wdj_db (scalar): The gradient of the cost w.r.t. the parameter b     """# Number of training examplesm = x.shape[0]    dj_dw = 0dj_db = 0for i in range(m):  f_wb = w * x[i] + b dj_dw_i = (f_wb - y[i]) * x[i] dj_db_i = f_wb - y[i] dj_db += dj_db_idj_dw += dj_dw_i dj_dw = dj_dw / m dj_db = dj_db / m return dj_dw, dj_db
plt_gradients(x_train,y_train, compute_cost, compute_gradient)
plt.show()

在這里插入圖片描述
上面的左邊的圖固定了b=100。左圖顯示了成本曲線在三個點上相對于w的斜率。在圖的右邊,導數是正的,而在左邊,導數是負的。由于“碗形”,導數將始終導致梯度下降到梯度為零的底部。
梯度下降將利用損失函數對w和對b求偏導來更新參數。右側的“顫抖圖”提供了一種查看兩個參數梯度的方法。箭頭大小反映了該點的梯度大小。箭頭的方向和斜率反映了的比例在這一點上。注意,梯度點遠離最小值。從w或b的當前值中減去縮放后的梯度。這將使參數朝著降低成本的方向移動。

梯度下降法

既然可以計算梯度,那么上面式(3)中描述的梯度下降可以在下面的gradient_descent中實現。在評論中描述了實現的細節。下面,你將利用這個函數在訓練數據上找到w和b的最優值。

def gradient_descent(x, y, w_in, b_in, alpha, num_iters, cost_function, gradient_function): """Performs gradient descent to fit w,b. Updates w,b by taking num_iters gradient steps with learning rate alphaArgs:x (ndarray (m,))  : Data, m examples y (ndarray (m,))  : target valuesw_in,b_in (scalar): initial values of model parameters  alpha (float):     Learning ratenum_iters (int):   number of iterations to run gradient descentcost_function:     function to call to produce costgradient_function: function to call to produce gradientReturns:w (scalar): Updated value of parameter after running gradient descentb (scalar): Updated value of parameter after running gradient descentJ_history (List): History of cost valuesp_history (list): History of parameters [w,b] """w = copy.deepcopy(w_in) # avoid modifying global w_in# An array to store cost J and w's at each iteration primarily for graphing laterJ_history = []p_history = []b = b_inw = w_infor i in range(num_iters):# Calculate the gradient and update the parameters using gradient_functiondj_dw, dj_db = gradient_function(x, y, w , b)     # Update Parameters using equation (3) aboveb = b - alpha * dj_db                            w = w - alpha * dj_dw                            # Save cost J at each iterationif i<100000:      # prevent resource exhaustion J_history.append( cost_function(x, y, w , b))p_history.append([w,b])# Print cost every at intervals 10 times or as many iterations if < 10if i% math.ceil(num_iters/10) == 0:print(f"Iteration {i:4}: Cost {J_history[-1]:0.2e} ",f"dj_dw: {dj_dw: 0.3e}, dj_db: {dj_db: 0.3e}  ",f"w: {w: 0.3e}, b:{b: 0.5e}")return w, b, J_history, p_history #return w and J,w history for graphing
# initialize parameters
w_init = 0
b_init = 0
# some gradient descent settings
iterations = 10000
tmp_alpha = 1.0e-2
# run gradient descent
w_final, b_final, J_hist, p_hist = gradient_descent(x_train ,y_train, w_init, b_init, tmp_alpha, iterations, compute_cost, compute_gradient)
print(f"(w,b) found by gradient descent: ({w_final:8.4f},{b_final:8.4f})")

在這里插入圖片描述

成本與梯度下降的迭代

代價與迭代的關系圖是衡量梯度下降過程的有用方法。在成功的運行中,成本應該總是降低的。最初成本的變化是如此之快,用不同的尺度來繪制最初的坡度和最終的下降是很有用的。在下面的圖表中,請注意軸上的成本比例和迭代步驟。

# plot cost versus iteration  
fig, (ax1, ax2) = plt.subplots(1, 2, constrained_layout=True, figsize=(12,4))
ax1.plot(J_hist[:100])
ax2.plot(1000 + np.arange(len(J_hist[1000:])), J_hist[1000:])
ax1.set_title("Cost vs. iteration(start)");  ax2.set_title("Cost vs. iteration (end)")
ax1.set_ylabel('Cost')            ;  ax2.set_ylabel('Cost') 
ax1.set_xlabel('iteration step')  ;  ax2.set_xlabel('iteration step') 
plt.show()

在這里插入圖片描述

預測

現在您已經發現了參數w和b的最優值,您可以現在用這個模型根據我們學到的參數來預測房價。作為預期,預測值與訓練值幾乎相同住房。此外,不在預測中的值與期望值一致。

print(f"1000 sqft house prediction {w_final*1.0 + b_final:0.1f} Thousand dollars")
print(f"1200 sqft house prediction {w_final*1.2 + b_final:0.1f} Thousand dollars")
print(f"2000 sqft house prediction {w_final*2.0 + b_final:0.1f} Thousand dollars")

在這里插入圖片描述

繪制

您可以通過在代價(w,b)的等高線圖上繪制迭代代價來顯示梯度下降的執行過程。

fig, ax = plt.subplots(1,1, figsize=(12, 6))
plt_contour_wgrad(x_train, y_train, p_hist, ax)

在這里插入圖片描述

上圖等高線圖顯示了w和b范圍內的成本(w, b)用圓環表示。用紅色箭頭覆蓋的是梯度下降的路徑。以下是一些需要注意的事項:這條路平穩地(單調地)向目標前進。最初的步驟比接近目標的步驟要大得多。
放大后,我們可以看到梯度下降的最后步驟。注意,當梯度趨于零時,步驟之間的距離會縮小。

fig, ax = plt.subplots(1,1, figsize=(12, 4))
plt_contour_wgrad(x_train, y_train, p_hist, ax, w_range=[180, 220, 0.5], b_range=[80, 120, 0.5],contours=[1,5,10,20],resolution=0.5)

在這里插入圖片描述

# initialize parameters
w_init = 0
b_init = 0
# set alpha to a large value
iterations = 10
tmp_alpha = 8.0e-1
# run gradient descent
w_final, b_final, J_hist, p_hist = gradient_descent(x_train ,y_train, w_init, b_init, tmp_alpha, iterations, compute_cost, compute_gradient)

在這里插入圖片描述
上面,w和b在正負之間來回跳躍,絕對值隨著每次迭代而增加。此外,每次迭代J(w,b)都會改變符號,成本也在增加W而不是遞減。這是一個明顯的跡象,表明學習率太大,解決方案是發散的。我們用一個圖來形象化。

plt_divergence(p_hist, J_hist,x_train, y_train)
plt.show()

上面,左圖顯示了w在梯度下降的前幾個步驟中的進展。W從正到負振蕩,成本迅速增長。梯度下降同時在兩個魔杖b上運行,因此需要右邊的3-D圖來獲得完整的圖像。

祝賀

在這個實驗中深入研究了單個變量的梯度下降的細節。開發了一個程序來計算梯度想象一下梯度是什么完成一個梯度下降程序利用梯度下降法求參數考察了確定學習率大小的影響

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【茶話數據結構】查找最短路徑——Dijkstra算法詳解(保姆式詳細圖解,步步緊逼,保你學會)

&#x1f4af; 博客內容&#xff1a;【茶話數據結構】查找最短路徑——Dijkstra算法詳解 &#x1f600; 作??者&#xff1a;陳大大陳 &#x1f989;所屬專欄&#xff1a;數據結構筆記 &#x1f680; 個人簡介&#xff1a;一個正在努力學技術的準前端&#xff0c;專注基礎和實…

【學習心得】為Django項目創建專用MySQL用戶并賦予權限

一、問題描述 也許你在本地開發Django項目的時候不會關心&#xff0c;項目A所用的MySQL數據庫能否被項目B訪問。但若你使用的公司服務器or學校服務器&#xff0c;這種情況下很多人共用一個MySQL&#xff0c;你就會擔心別人或別的項目胡亂訪問你正在開發的項目所使用的數據庫。這…

算法D33 | 貪心算法3 | 1005.K次取反后最大化的數組和 134. 加油站 135. 分發糖果

1005.K次取反后最大化的數組和 本題簡單一些&#xff0c;估計大家不用想著貪心 &#xff0c;用自己直覺也會有思路。 代碼隨想錄 Python: class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(keylambda x: abs(x), reverseT…

【python】遵守 robots.txt 規則的數據爬蟲程序

程序1 編寫一個遵守 robots.txt 規則的數據爬蟲程序涉及到多個步驟&#xff0c;包括請求網頁、解析 robots.txt 文件、掃描網頁內容、存儲數據以及處理異常。由于編程語言眾多&#xff0c;且每種語言編寫爬蟲程序的方式可能有所不同&#xff0c;以下將使用 Python 語言舉例&am…

【論文】A Survey of Monte Carlo Tree Search Methods閱讀筆記

本文主要是將有關蒙特卡洛樹搜索的文獻&#xff08;2011年之前&#xff09;進行歸納&#xff0c;概述了核心算法的推導&#xff0c;給出了已經提出的許多變化和改進的一些結構&#xff0c;并總結了MCTS方法已經應用于的博弈和其他領域的結果。 蒙特卡洛樹搜索是一種通過在決策…

Redis在中國火爆,為何MongoDB更受歡迎國外?

一、概念 Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一個使用ANSI C編寫的開源、支持網絡、基于內存、分布式、可選持久性的鍵值對存儲數據庫。Redis是由Salvatore Sanfilippo于2009年啟動開發的&#xff0c;首個版本于同年5月發布。 MongoDB MongoDB…

C++練手題

第 1 題 【 問答題 】 ? 紅與黑 有一間長方形的房子&#xff0c; 地上鋪了紅色、 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上&#xff0c; 只能向相鄰的黑色瓷磚移動。 請寫一個程序&#xff0c; 計算你總共能夠到達多少塊黑色的瓷磚。 時間限制&#xff1a; 1000…

基于R語言地理加權回歸、主成份分析、判別分析等空間異質性數據分析

在自然和社會科學領域有大量與地理或空間有關的數據&#xff0c;這一類數據一般具有嚴重的空間異質性&#xff0c;而通常的統計學方法并不能處理空間異質性&#xff0c;因而對此類型的數據無能為力。以地理加權回歸為基礎的一系列方法&#xff1a;經典地理加權回歸&#xff0c;…

Linux相關小技巧《三》

需求&#xff1a; 前一段時間有收到這樣的一個關于linux用戶的權限相關的需求&#xff0c;在centos上給用戶創建一個用SSH的密鑰訪問服務器&#xff0c;另給該用戶添加到root權限組。記錄下了步驟&#xff0c;分享給大家。 步驟&#xff1a; 添加root用戶組&#xff1a; gr…

跳躍游戲問題(算法村第十七關黃金挑戰)

跳躍游戲 55. 跳躍游戲 - 力扣&#xff08;LeetCode&#xff09; 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &…

人工智能-零基礎

機緣 擴充下知識棧&#xff0c;準備零基礎開始 人工智能零基礎 日常 日常水一下博客… 憧憬 努力成為一個會人工智能的程序員

軟考筆記--構件與軟件復用

構件也稱為組件&#xff08;component&#xff09;&#xff0c;是一個功能相對獨立的具有可復用價值的軟件單元。在面向對象的方法中&#xff0c;一個構件有一組對象組成&#xff0c;包含可一些協作的類的集成&#xff0c;它們協同工作來提供一種系統功能。可復用性是指系統和其…

138.樂理基礎-等音、等音程的意義

上一個內容&#xff1a;137.樂理基礎-協和音程、不協和音程 上一個內容里練習的答案&#xff1a; 等音、等音程的意義&#xff0c;首先在 19.音階 里寫了&#xff0c;一個調使用的音階應當是從主音快開始&#xff0c;以階梯狀的形式進行到主音結束&#xff0c;這樣才能明顯從樂…

在docker中運行 pip 報錯 Can‘t start new thread

原因源頭 stackoverflowhis is because the default seccomp profile of Docker 20.10.9 is not adjusted to support the clone() syscall wrapper of glibc 2.34 adopted in Ubuntu 21.10 and Fedora 35.由于docker 版本與最新版 python 容器沖突導致 解決方案 以下三種方…

b站小土堆pytorch學習記錄—— P16 神經網絡的基本骨架 nn.Module的使用

文章目錄 一、前置知識1.nn是什么2.nn如何使用 二、代碼 一、前置知識 1.nn是什么 在深度學習中&#xff0c;“nn” 通常是指神經網絡&#xff08;Neural Network&#xff09;的縮寫。神經網絡是一種由大量神經元&#xff08;neurons&#xff09;相互連接而成的模型&#xff…

【Python】成功解決TypeError: list indices must be integers or slices, not float

【Python】成功解決TypeError: list indices must be integers or slices, not float &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&…

vue 打包配置

vue打包配置記錄一下 publicPath: 打包的路徑 默認值&#xff1a;/&#xff08;根目錄&#xff09;&#xff1b; 任意路徑&#xff1a;""或者"./" (相對路徑) 參照&#xff1a;Vue CLI4.0 webpack配置屬性——publicPath_publicpath怎么寫相對路徑-CSDN…

springboot讀取自定義配置

springboot讀取自定義配置 application.yml自定義配置 my-app:ip1:#dmz1 ftp服務器ipAddress: 172.12.23.456port: 21username: adminpassword: adminip2:ipAddress: 172.12.23.457port: 21username: adminpassword: admin方式1&#xff0c;Value注解 Component public clas…

兩天學會微服務網關Gateway-Gateway工作原理

鋒哥原創的微服務網關Gateway視頻教程&#xff1a; Gateway微服務網關視頻教程&#xff08;無廢話版&#xff09;_嗶哩嗶哩_bilibiliGateway微服務網關視頻教程&#xff08;無廢話版&#xff09;共計17條視頻&#xff0c;包括&#xff1a;1_Gateway簡介、2_Gateway工作原理、3…

【網站項目】144校園二手物品交易平臺

&#x1f64a;作者簡介&#xff1a;擁有多年開發工作經驗&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。&#x1f339;贈送計算機畢業設計600個選題excel文件&#xff0c;幫助大學選題。贈送開題報告模板&#xff…