吳恩達機器學習筆記(2)—單變量線性回歸

目錄

一、模型表示

二、代價函數

三、代價函數的直觀理解(1)

四、代價函數的直觀理解(2)

五、梯度下降

六、梯度下降的直觀理解

七、線性回歸的梯度下降


在本篇內容中,我們將介紹第一個機器學習算法——線性回歸算法。更重要的是,我們將借助這個算法,帶你了解一個完整的監督學習流程

一、模型表示

我們通過一個例子來開始:預測房價。我們擁有一個數據集,記錄了美國俄勒岡州波特蘭市的若干房子面積及其對應的成交價格。橫軸表示房子的面積(平方英尺),縱軸表示房價(千美元)。如果有一套房子面積是 1250 平方英尺,想知道大概能賣多少錢。你可以通過構建一個預測模型來實現,比如你可以用一條直線來擬合數據,從而推斷出:這套房子可能值大約 22 萬美元左右。

這是監督學習算法的一個例子。?因為在訓練過程中,每個數據樣本都包含一個“正確答案”,也就是我們已經知道的真實輸出(每個房子的實際售價)。而且這還是一個回歸問題的例子,因為預測一個具體的數值輸出(房子的價格)。

在監督學習中我們有一個數據集,這個數據集被稱訓練集,如下圖。

在課程中,使用以下符號來描述訓練集和模型結構:?

  • m:訓練樣本數量

  • x:特征/輸入變量(例如房子面積)

  • y:目標變量/輸出變量(例如房子價格)

  • ({?{x}^{(i)}},{?{y}^{(i)}}):第 i?個訓練樣本

  • h:學習算法輸出的假設函數(hypothesis)

一個典型的監督學習過程如下:

  1. 收集訓練數據,比如不同面積的房子及其對應價格。

  2. 將這些數據輸入給學習算法。

  3. 算法“學習”出一個函數 h,也就是我們的預測模型

  4. 當想預測一套房子的售價時,只需將其面積作為輸入,使用這個函數 h?得到預測價格。

換句話說,我們希望找到一個函數 h,使得它能近似地預測出輸入 x(房屋面積)對應的輸出 y(價格)。這可以用線性函數表示為:

$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

因為這里只有一個特征(房子面積),所以我們稱這種情況為單變量線性回歸

二、代價函數

在這一節中我們將定義代價函數的概念,這有助于我們弄清楚如何把最有可能的直線與我們的數據相擬合。在上一節中,我們得到的假設函數為一個線性函數形式:

$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

選擇不同的參數?$\theta_{0}$?和 $\theta_{1}$?會得到不同的假設函數?$h_\theta \left( x \right)$?,如下圖。

$\theta_{i}$?稱為模型參數,我們要做的是選擇出一組合適的參數 $\theta_{0}$?和 $\theta_{1}$,使得模型預測值 $h_\theta \left( x \right)$?與實際值 y 的差距最小。這里給出標準定義,在線性回歸中要解決的是最小化問題。

最小化公式,加平方是為了使差距極其小

$\min_{\theta_0,\, \theta_1} \qquad (h_\theta(x) - y)^2$

對所有訓練樣本的差距進行求和,\frac{1}{2m}是為了盡量減少平均誤差

$\min_{\theta_0,\, \theta_1} \qquad \frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta(x^{(i)}) - y^{(i)}\right)^2$

由于假設函數表示為

$h_\theta(x^{(i)}) = \theta_{0} + \theta_{1}x^{(i)}$

因此問題變成找到?\theta_{0}?和 $\theta_{1}$?的值,使以下公式最小

$\min_{\theta_0,\, \theta_1} \qquad J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

J(\theta_0, \theta_1)?就是代價函數,這個函數也叫作 平方誤差代價函數它是回歸問題中最常見也是最合理的選擇之一。

三、代價函數的直觀理解(1)

?在這一節中,為了更好地使代價函數J可視化,我們使用一個簡化的代價函數,可以讓我們更好的理解代價函數的概念。

將假設函數的參數?\theta_{0}?視為0

$h_\theta(x^{(i)}) = \theta_{1}x^{(i)}$

那么代價函數就變為

$\min_{\theta_1} \qquad J(\theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

優化目標就是盡量減少?$J(\theta_1)$?的值

實際上,有兩個關鍵函數是我們需要去了解的。一個是假設函數?$h_\theta(x)$? ,第二個是代價函數?$J(\theta_1)$?。假設函數h是對于給定的?\theta_1?的值,是一個關于 x 的函數。代價函數J是關于參數?\theta_1?的函數。假設有三個點的訓練集(1,1) (2,2) (3,3) ,當?\theta_1=1?時,代價函數J的值計算如下。

$ \begin{aligned} J(\theta_1) &= \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 \\ &= \frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{1}x^{(i)} - y^{(i)} \right)^2 \\ &= \frac{1}{2m}(0^2+0^2+0^2) \\ &= 0 \end{aligned} $

得出當?\theta_1=1?時,h_\theta(x^{(i)}) = y^{(i)},因此?J(1) = 0

繪制的兩個函數的圖形如下。

當?\theta_1=0.5?時,代價函數J的值計算如下。

$ \begin{aligned} J(\theta_1) &= \frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{1}x^{(i)} - y^{(i)} \right)^2 \\ &= \frac{1}{2*3}[(0.5-1)^2+(1-2)^2+(1.5-3)^2] \\ &\approx 0.58 \end{aligned} $

得出當?\theta_1=0.5?時,?J(0.5) \approx 0.58

繪制的兩個函數的圖形如下。

同理,計算出其它代價函數J的值,比如:

當?\theta_1=0?時,J(0) \approx 2.3

當?\theta_1=-0.5?時,J(-0.5) \approx 5.25

最終,得到的代價函數J的圖形如下。

學習算法的優化目標,是通過選擇?\theta_1?的值,獲得最小的?$J(\theta_1) $?。在這條曲線中,當?\theta_1 = 1?時,$J(\theta_1) $?最小。通過觀察也可以得出,這是條完美擬合訓練集數據的直線。

四、代價函數的直觀理解(2)

在本節課程中,我們將更深入地學習代價函數的作用,并借助圖形化方式(等高線圖)來幫助我們直觀地理解其行為與最小值位置。下面是本節用到的公式,與上節不一樣的是保留參數?\theta_0?和 \theta_1

假設函數:? ?$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

模型參數:? ?\theta_0,\theta_1 ?

代價函數:? ?$J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

優化目標:? ?$\min_{\theta_0,\, \theta_1} J(\theta_0, \theta_1)$

采用關于住房價格的訓練集,假設\theta_0=50,\theta_1=0.06,繪制假設函數h和代價函數J的圖形。其中,代價函數J是關于?\theta_0?和 \theta_1?的函數,是一個3D曲面圖,橫軸為?\theta_0?和 \theta_1?,豎軸為代價函數J。

為了更好地展現圖形,?我們使用等高線圖來展示代價函數,軸為?\theta_0?和 \theta_1?,每個橢圓形顯示一系列?$J(\theta_0, \theta_1)$?值相等的點,這些同心橢圓的中心點是代價函數的最小值右下圖是代價函數的等高線圖,左下圖是代價函數的最小值(橢圓的中心點)對應的假設函數的圖形。

五、梯度下降

在本節課程中,我們將使用梯度下降法替代在上節中的人工方法,來自動尋找代價函數J最小值對應的參數?\theta_0?和 \theta_1?,也更適合處理在遇到更復雜、更高維度、更多參數的難以可視化的情況。

問題概述:假設有個代價函數?$J(\theta_0, \theta_1)$?,我們需要用一個算法來最小化這個代價函數。

梯度下降法的思路:首先給定?\theta_0?和 \theta_1?的初始值,通常為?\theta_0=0,\theta_1=0?,然后不停地一點點地改變?\theta_0?和 \theta_1?的值來使J變小,直到找到J的最小值或局部最小值

通過圖像可以更直觀地理解梯度下降法是如何最小化代價函數J的。下圖是橫軸為?\theta_0?和 \theta_1?,豎軸為代價函數J ,并對?\theta_0?和 \theta_1?賦以不同的初始值。

把這個圖像想象為公園中的兩座山,然后你正站在山上的一個點上,在梯度下降算法中,我們要做的就是旋轉360度,看看周圍,并問自己要盡快下山的話,我應該朝什么方向邁步?然后你按照自己的判斷邁出一步,重復上面的步驟,從這個新的點,你環顧四周,并決定從什么方向將會最快下山,然后又邁進了一小步,并依此類推,直到你接近局部最低點的位置。對?\theta_0?和 \theta_1?賦以不同的初始值,會得到如圖中兩個不同的局部最低點,這是梯度下降法的一個特點。

如下圖是梯度下降法的數學定義,將會重復更新?\theta_j?的步驟,直到收斂。

其中是 α 學習率,用來控制梯度下降時邁出的步子有多大。如果 α 值很大,會用大步子下山,梯度下降就很迅速;如果 α 值很小,會邁著小碎步下山,梯度下降就很慢。\frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1)?是代價函數J的導數,這跟微積分有關系

要正確實現梯度下降法,還需要同時更新?\theta_0?和 \theta_1?,左下圖的同時更新是正確的,右下圖沒有同時更新是錯誤的。

六、梯度下降的直觀理解

梯度下降算法的數學定義如下,其中,α 是學習率,\frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1)?是導數項。本節課程將直觀認識這兩部分的作用,以及更新過程有什么意義。

下面將直觀解釋導數項的意義,如下圖像,是一個只有參數?\theta_1?簡化的代價函數?$J(\theta_1) $?的圖像,梯度下降算法的更新規則:$\theta_1:=\theta_1-\alpha\frac{\partial}{\partial \theta_1} J(\theta_1)$?

?導數項?$\frac{\partial}{\partial \theta_1} J(\theta_1)$?可以說是?\theta_1?點關于代價函數?$J(\theta_1) $?的切線的斜率,斜率可以表示?k=tan\beta? ?其中,β 是直線與?x?軸正方向的夾角。因此,圖中是個正斜率,也就是正導數,同時學習率 α 永遠是個正數,所以?\theta_1?更新后變小了,要往左移,更接近最低點。

取另一個點?\theta_1?如上圖,計算得出是負斜率,也就是負導數,所以?\theta_1?更新后變大了,要往右移,更接近最低點。

接下來介紹學習率?α 的作用如果?α 太小,如下圖,結果就是會一點點地挪動,需要很多步才能到達全局最低點。

如果?α 太大,如下圖,那么梯度下降法可能會越過最低點,甚至可能無法收斂或者發散。

如果?\theta_1?已經處在一個局部的最低點,如下圖,由于最低點的斜率為0,也就是導數等于0,所以?\theta_1?將保持不變,那么梯度下降法更新其實什么都沒做,它不會改變參數的值。

接下來解釋即使學習速率?α 保持不變時,梯度下降也可以收斂到局部最低點。如下圖,在梯度下降法的更新過程中,隨著越接近最低點,導數(斜率)越來越小,梯度下降將自動采取較小的幅度,?\theta_1?更新的幅度就會越小,直到收斂到局部極小值,這就是梯度下降的做法。所以實際上沒有必要再另外減小

七、線性回歸的梯度下降

在本節課程,我們要將梯度下降法和代價函數結合,得到線性回歸的算法,它可以用直線模型來擬合數據。如下圖,是梯度下降算法和線性回歸模型,線性回歸模型包含了假設函數和平方差代價函數。

將梯度下降法和代價函數結合,即最小化平方差代價函數,關鍵在于求出代價函數的導數

$ \begin{aligned} \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1) &= \frac{\partial}{\partial \theta_j}\frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 \\ &= \frac{\partial}{\partial \theta_j}\frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} \right)^2\end{aligned} $

根據微積分公式,在 j 等于0和1時,推導出的偏導數公式如下

$ \frac{\partial}{\partial \theta_0} J(\theta_0, \theta_1) = \frac{1}{m} \sum_{i=1}^{m} \left( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} \right) $

$ \frac{\partial}{\partial \theta_1} J(\theta_0, \theta_1) = \frac{1}{m} \sum_{i=1}^{m} \left(( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} )*x^{(i)}\right) $

?根據公式計算出偏導數項的值,就可以代入到梯度下降法中,不斷地對參數進行同步更新,直到收斂,得到線性回歸的全局最優解

在上面的算法中,有時也稱為批量梯度下降”,指的是在梯度下降的每一步中,我們都用到了所有的訓練樣本。在梯度下降中,在計算微分求導項時,我們需要進行求和運算,需要對所有 m 個訓練樣本求和。而事實上,有時也有其他類型的梯度下降法,不是這種"批量"型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。

如果之前有學過高等線性代數,應該知道有一種計算代價函數 J 最小值的解法,而不需要使用梯度下降這種迭代算法。這是另一種稱為正規方程(normal equations)的方法。實際上在數據量較大的情況下,梯度下降法比正規方程要更適用一些。

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

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

相關文章

最新華為 HCIP-Datacom(H12-821)

最新 HCIP-Datacom(H12-821),完整題庫請上方訪問,更新完畢。 在OSPF網絡中,NSSA區域與STUB區域都是為了減少LSA數量,兩者最主要的區別在于,NSSA區域可以引入外部路由,并同時接收OSPF…

vba學習系列(11)--批退率通過率等數據分析

系列文章目錄 文章目錄 系列文章目錄前言一、外觀報表1.產能2.固定傷排查3.鏡片不良TOP4.鏡片公式計算5.鏡片良率計算6.鏡片批退率7.鏡筒不良TOP8.鏡筒公式計算9.鏡筒良率計算10.鏡筒批退率 二、反射率報表1.機臺通過率2.鏡片通過率圈數分析3.鏡片通過率罩次分析4.鏡筒通過率圈…

成功在 Conda Python 2.7 環境中安裝 Clipper(eCLIP peak caller)

🔬 成功在 Conda Python 2.7 環境中安裝 Clipper(eCLIP peak caller) 本文記錄了如何在無 root 權限下使用 Conda 環境,解決依賴、構建擴展模塊并成功安裝運行 clipper 的詳細流程。適用于再現 eCLIP 分析流程時遇到 clipper 安裝…

通過 VS Code 連接 GitLab 并上傳項目

通過 VS Code 連接 GitLab 并上傳項目,請按照以下步驟操作: 1. 安裝必要工具 確保已安裝 Git 并配置用戶名和郵箱: git config --global user.name "你的用戶名" git config --global user.email "你的郵箱" 在 VS Cod…

開源夜鶯支持MySQL數據源,更方便做業務指標監控了

夜鶯監控項目最核心的定位,是做一個告警引擎,支持多種數據源的告警。這個版本的更新主要是增加了對 MySQL 數據源的支持,進一步增強了夜鶯在業務指標監控方面的能力。 之前版本的夜鶯主要聚焦在 Prometheus、VictoriaMetrics、ElasticSearch…

SpringCloud + MybatisPlus:多租戶模式與實現

一、多租戶的基本概念 多租戶(Multi-Tenancy) 是指在一套軟件系統中,多個租戶(客戶)共享相同的基礎設施和應用程序,但數據和配置相互隔離的架構模式。其核心目標是 降低成本 和 保證數據安全。 核心特點: 資源共享:租戶共享服務器、數據庫、代碼等資源。數據隔離:通…

Kafka入門:解鎖核心組件,開啟消息隊列之旅

一、引言 Kafka以超高速吞吐、精準的路由策略和永不掉線的可靠性,讓海量數據在分布式系統中暢行無阻。無論你是剛接觸消息隊列的技術小白,還是尋求性能突破的開發老手,掌握 Kafka 核心組件的運作原理,都是解鎖高效數據處理的關鍵…

前端項目Excel數據導出同時出現中英文表頭錯亂情況解決方案。

文章目錄 前言一、Excel導出出現中英文情況。二、解決方案數據處理 三、效果展示總結 前言 在前端項目中實現Excel導出功能時,數據導出excel是常見的業務需求。但excel導出完表頭同時包含了中文和英文的bug,下面是我的經驗分享,應該可以幫助…

《開竅》讀書筆記8

51.學會贊美他人,能凈化心靈,建立良好人際關系,讓生活充滿陽光。 52.欣賞他人的學習過程,能激發潛能,促進相互成長,讓有點共存。 53.別因“自我”一葉障目,要關注他人,欣賞與別欣賞式…

基于 Spring Cloud Gateway + Sentinel 實現高并發限流保護機制

基于 Spring Cloud Gateway Sentinel 實現視頻播放接口限流保護機制 作者:NovaTube 開發者 | 時間:2025-06 標簽:Spring Cloud Gateway、Sentinel、微服務、限流、接口保護 一、背景介紹 在我們開發的在線視頻分享平臺 NovaTube…

CountDownLatch入門代碼解析

文章目錄 核心思想:火箭發射倒計時 🚀最簡單易懂的代碼示例代碼解析運行流程分析 核心思想:火箭發射倒計時 🚀 想象一下發射火箭的場景,在按下最終的發射按鈕之前,必須有好幾個系統同時完成自檢&#xff0…

用Python寫一個可視化大屏

用Python打造可視化大屏:數據洞察新視界 在當今數據爆炸的時代,數據可視化成為了理解和傳達復雜信息的關鍵工具。Python作為一門強大且靈活的編程語言,提供了豐富的庫和工具,讓我們能夠創建出令人驚嘆的可視化大屏。本文將帶你逐步…

20250611讓NanoPi NEO core開發板在Ubuntu core16.04系統下開機自啟動的時候拉高GPIOG8

rootNanoPi-NEO-Core:/# touch open_4g_ec20.sh rootNanoPi-NEO-Core:/# vi open_4g_ec20.sh 【打開使能引腳200 IOG8】 echo 200 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio200/direction echo 1 > /sys/class/gpio/gpio200/value 【切記&#xff1a…

解惑1、為何大容量電容濾低頻,小容量電容濾高頻

一、電容的種類: 鏈接: 二、疑惑 理論推算: 1)Zc1/wc,那么大容量和小容量的電容,不應該都是 越高頻越阻抗低,越容易通過? 2)大容量,積蓄電荷速度慢&#…

如何有效監控JVM環境,保障應用性能

緩慢的Java應用程序、意外崩潰和晦澀的內存問題——這些都是JVM可能在默默承受壓力的信號。JVM監控對于保障Java應用的正常運行時間和最佳性能至關重要,它提供了對Java虛擬機內存、線程和CPU資源使用情況的可見性,使管理員能夠在影響終端用戶之前識別性能…

python:PyQt5 開發一個郵件客戶端,能編寫郵件,發送郵件及附件

PyQt5 郵件客戶端 下面是一個簡潔高效的郵件客戶端實現,支持編寫郵件、添加附件和發送郵件功能: 編寫 eMailClient_qt.py 如下 # -*- coding: utf-8 -*- """ 用 PyQt5 開發一個郵件客戶端,能編寫郵件,發送郵件及…

React【回顧】 深層次面試詳解:函數式組件核心原理與高級優化

以下是對 React 深層次內容的全面解析,涵蓋函數式組件的核心原理、性能優化、設計模式和最新特性: ?? 一、React 核心機制剖析 1. Fiber 架構深解 Fiber 節點結構:function FiberNode(tag, pendingProps, key) {this.tag = tag; // 組件類型(函數組件=0, 類…

視覺語言模型的“視而不見“

這項研究發現,號稱能“看圖說話”的視覺語言模型(VLMs),在處理需要真正“看”懂圖片的純視覺任務(如判斷深度、找對應點、認物體材質等)時,表現遠不如它們自己內部的“眼睛”(視覺編…

Wyn 商業智能與 3D 大屏的深度融合應用

引言 在當今數字化快速發展的時代,數據可視化對于企業的決策和管理變得至關重要。商業智能軟件作為數據可視化的重要工具,能夠幫助企業將海量的數據轉化為直觀、易懂的信息。而 3D 大屏以其沉浸式、立體的展示效果,為數據可視化帶來了全新的…

使用docker compose部署netmaker打通內網

準備 我看官網推薦都是使用ssl然后要ssl證書,不想走彎路了 一、docker-compose.yml version: "3.4"services:netmaker:container_name: netmakerimage: gravitl/netmaker:v0.90.0restart: unless-stoppedports:- "18081:18082"- "50051…