日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

吴恩达机器学习(第四章)——多变量线性回归

發(fā)布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 吴恩达机器学习(第四章)——多变量线性回归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第四章-多變量線性回歸

文章目錄

  • 第四章-多變量線性回歸
      • 多功能
      • 多元梯度下降法
        • 梯度下降算法
        • 特征縮放
        • 學(xué)習(xí)率
      • 特征與多項(xiàng)式回歸
      • 正規(guī)方程
        • 正規(guī)方程的概念
        • 公式的推導(dǎo)
        • 梯度下降法 VS 正規(guī)方程
        • 奇異矩陣的解決辦法

多功能

我們探討了單變量/特征的回歸模型,現(xiàn)在我們對房價模型增加更多的特征,樓層數(shù)、臥室數(shù)、使用年數(shù)等會影響房屋的價格,構(gòu)成一個含有多個變量的模型,模型中的特征為(x1,x2,x3,...,xn)\left( {x_{1}},{x_{2}},{x_{3}}, ... ,{x_{n}} \right)(x1?,x2?,x3?,...,xn?)

我們引入一系列新的標(biāo)記:

  • nnn 代表特征的數(shù)量
  • x(i){x^{\left( i \right)}}x(i) 代表第 iii 個訓(xùn)練實(shí)例,是特征矩陣中的第 iii 行,是一個向量(vector)。比如上圖的 x(2)=[14163240]{x}^{(2)}\text{=}\begin{bmatrix} 1416 \\\ 3 \\\ 2 \\\ 40 \end{bmatrix}x(2)=?????1416?3?2?40??????
  • xj(i){x}_{j}^{\left( i \right)}xj(i)? 代表特征矩陣中第 iii 行的第 jjj 個特征,也就是第 iii 個訓(xùn)練實(shí)例的第 jjj 個特征。比如上圖的 x2(2)=3x_{2}^{\left( 2 \right)}=3x2(2)?=3

單個特征變量的線性回歸假設(shè)為 hθ(x)=θ0+θ1xh_\theta \left( x \right)=\theta_{0} + \theta_{1}xhθ?(x)=θ0?+θ1?x
多個特征變量的線性回歸假設(shè)為 hθ(x)=θ0+θ1x1+θ2x2+...+θnxnh_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ?(x)=θ0?+θ1?x1?+θ2?x2?+...+θn?xn? ,公式中有 n+1n+1n+1 個參數(shù)和 nnn 個變量
為了使得公式能夠簡化一些,引入 x0=1x_{0}=1x0?=1,則公式轉(zhuǎn)化為:hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ?(x)=θ0?x0?+θ1?x1?+θ2?x2?+...+θn?xn?

現(xiàn)在,特征向量 xxx 是一個從 0開始標(biāo)記的 n+1n+1n+1 維的向量,x=[x0x1x2...xn]∈Rn+1x=\left[ \begin{matrix} {{x}_{0}} \\ {{x}_{1}} \\ {{x}_{2}} \\ {...} \\ {{x}_{n}} \\\end{matrix} \right]∈R^ { n+1}x=???????x0?x1?x2?...xn?????????Rn+1
同時把參數(shù) θθθ 也看做一個向量 θ=[θ0θ1θ2...θn]∈Rn+1\theta=\left[ \begin{matrix} {{\theta}_{0}} \\ {{\theta}_{1}} \\ {{\theta}_{2}} \\ {...} \\ {{\theta}_{n}} \\\end{matrix} \right]∈R^ { n+1}θ=???????θ0?θ1?θ2?...θn?????????Rn+1
那么假設(shè)公式可以寫為 hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTXh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}={\theta^{T}}Xhθ?(x)=θ0?x0?+θ1?x1?+θ2?x2?+...+θn?xn?=θTX,其中x0=1x_{0}=1x0?=1,上標(biāo)TTT代表矩陣轉(zhuǎn)置。

用多個特征量或變量來預(yù)測y,這就是多元線性回歸( Multiple linear regression)

多元梯度下降法

梯度下降算法

與單變量線性回歸類似,在多變量線性回歸中,我們也構(gòu)建一個代價函數(shù),這個代價函數(shù)是所有建模誤差的平方和,即:J(θ0,θ1...θn)=12m∑i=1m(hθ(x(i))?y(i))2J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}J(θ0?,θ1?...θn?)=2m1?i=1m?(hθ?(x(i))?y(i))2,其中hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ?(x)=θ0?x0?+θ1?x1?+θ2?x2?+...+θn?xn?

多變量線性回歸的批量梯度下降算法為:

當(dāng)n>=1n>=1n>=1時,
θ0:=θ0?a1m∑i=1m(hθ(x(i))?y(i))x0(i){{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}θ0?:=θ0??am1?i=1m?(hθ?(x(i))?y(i))x0(i)?

θ1:=θ1?a1m∑i=1m(hθ(x(i))?y(i))x1(i){{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)}θ1?:=θ1??am1?i=1m?(hθ?(x(i))?y(i))x1(i)?

θ2:=θ2?a1m∑i=1m(hθ(x(i))?y(i))x2(i){{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)}θ2?:=θ2??am1?i=1m?(hθ?(x(i))?y(i))x2(i)?

我們開始隨機(jī)選擇一系列的參數(shù)值,計(jì)算所有的預(yù)測結(jié)果后,再給所有的參數(shù)一個新的值,如此循環(huán)直到收斂。

Python 代碼:

import numpy as npdef computeCost(X, y, theta):inner = np.power(((X * theta.T) - y), 2)return np.sum(inner) / (2 * len(X))

特征縮放

在我們面對多維特征問題的時候,如果你能確保這些特征都處在一個相近的范圍,這樣梯度下降就能更快的收斂,這就是特征縮放(Feature Scaling)

例如有兩個特征值:

  • x1 表示房屋面積的大小,取值在0~2000之間
  • x2 表示臥室的數(shù)量,取值在1~5之間。
  • 以兩個參數(shù)分別為橫縱坐標(biāo),繪制代價函數(shù)的等高線圖能,看出圖像會顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。解決的方法是嘗試將所有特征的尺度都盡量縮放到-1到1之間。

    通常,執(zhí)行特征縮放的目的是將特征的取值約束到-1到+1的范圍內(nèi)。(-1,+1),這個范圍可以靈活的選擇,只要不是太大或太小是可接受的。

    在特征縮放中,有時會進(jìn)行稱為 均值歸一化(Mean normalization) 的工作。如果有一個特征 xn?μnx_{n}-{\mu}_{n}xn??μn?,用來替換 xnx_{n}xn?,讓特征值具有為0的平均值。

    例如,房屋的面積取值在0~2000之間,x1=size?10002000{{x}_{1}}=\frac{{size}-{1000}}{{2000}}x1?=2000size?1000? ;臥室的數(shù)量取值在1~5之間,x2=bedroom?25{{x}_{2}}=\frac{{bedroom}-{2}}{{5}}x2?=5bedroom?2? 。其中?0.5≤x1≤0.5-0.5≤x_{1}≤0.5?0.5x1?0.5?0.5≤x2≤0.5-0.5≤x_{2}≤0.5?0.5x2?0.5注意這里不能應(yīng)用于 x0x_{0}x0? ,因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">x0x_{0}x0? 永遠(yuǎn)為 1。

    更一般的規(guī)律:xj(i)=xj(i)?μnsn{x}_{j}^{\left( i \right)}=\frac{{{x}_{j}^{\left( i \right)}}-{{\mu}_{n}}}{{{s}_{n}}}xj(i)?=sn?xj(i)??μn?? 。其中 μn{\mu_{n}}μn?是特征xj(i){x}_{j}^{\left( i \right)}xj(i)?的平均值 avg(xjx_{j}xj?) ;sn{s_{n}}sn?是該特征值的范圍 max(xjx_{j}xj?) - min(xjx_{j}xj?) ,也可以把它設(shè)置為標(biāo)準(zhǔn)差。

    特征縮放不必太精準(zhǔn),它只是為了讓梯度下降能夠運(yùn)行的更快一點(diǎn),讓迭代的次數(shù)更少一點(diǎn)。

    學(xué)習(xí)率

    梯度下降算法收斂所需要的迭代次數(shù)根據(jù)模型的不同而不同,我們不能提前預(yù)知,我們可以繪制迭代次數(shù)和代價函數(shù)的圖表來觀測算法在何時趨于收斂。
    橫軸表示的是迭代次數(shù),縱軸表示的是代價函數(shù)每次迭代之后的結(jié)果。

    介紹一種自動測試是否收斂的方法,如果代價函數(shù) J(θ)J({\theta})J(θ) 一步迭代后的下降小于某個閥值 ε(一般ε ≤ 10?310^{-3}10?3),這個測試就判斷函數(shù)已經(jīng)收斂。

    但是通常要選擇一個合適的閾值 ε 是非常困難的,所以通過上述的圖像判斷更加清晰可靠。

    如果從圖像中看到代價函數(shù) J(θ)J({\theta})J(θ) 一直在上升或者持續(xù)地先下降又上升,這意味著我們要選擇更小的學(xué)習(xí)率 ααα
    數(shù)學(xué)家已經(jīng)證明,只要選擇足夠小的學(xué)習(xí)率 ααα ,那么每次迭代之后的代價函數(shù) J(θ)J({\theta})J(θ) 都會下降。

    總結(jié):

    • 如果 α 太小,即學(xué)習(xí)速率太小,梯度下降法會收斂得很慢
    • 如果 α 太大,梯度下降法每次下降很快,可能會越過最小值,甚至可能無法收斂
    • 通常可以考慮嘗試這些學(xué)習(xí)率:α=0.01,0.03,0.1,0.3,1\alpha=0.01, 0.03, 0.1, 0.3, 1α=0.01,0.03,0.1,0.3,1

    特征與多項(xiàng)式回歸

    房價問題

    hθ(x)=θ0+θ1×frontage+θ2×depthh_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}\times{frontage}+{\theta_{2}}\times{depth}hθ?(x)=θ0?+θ1?×frontage+θ2?×depth

    x1=frontage{x_{1}}=frontagex1?=frontage(臨街寬度),x2=depth{x_{2}}=depthx2?=depth(縱向深度),x=frontage?depth=areax=frontage*depth=areax=frontage?depth=area(面積),則:hθ(x)=θ0+θ1x{h_{\theta}}\left( x \right)={\theta_{0}}+{\theta_{1}}xhθ?(x)=θ0?+θ1?x

    線性回歸并不適用于所有數(shù)據(jù),有時我們需要曲線來適應(yīng)我們的數(shù)據(jù),比如一個二次方模型:hθ(x)=θ0+θ1x1+θ2x22h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}hθ?(x)=θ0?+θ1?x1?+θ2?x22?
    或者三次方模型: hθ(x)=θ0+θ1x1+θ2x22+θ3x33h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}hθ?(x)=θ0?+θ1?x1?+θ2?x22?+θ3?x33?

    通常我們需要先觀察數(shù)據(jù)然后再決定準(zhǔn)備嘗試怎樣的模型。 另外,我們可以令:x2=x22,x3=x33{{x}_{2}}=x_{2}^{2},{{x}_{3}}=x_{3}^{3}x2?=x22?,x3?=x33?,從而將模型轉(zhuǎn)化為線性回歸模型。

    根據(jù)函數(shù)圖形特性,我們還可以使:hθ(x)=θ0+θ1(size)+θ2(size)2{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta}_{2}}{{(size)}^{2}}hθ?(x)=θ0?+θ1?(size)+θ2?(size)2

    或者:hθ(x)=θ0+θ1(size)+θ2size{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta }_{2}}\sqrt{size}hθ?(x)=θ0?+θ1?(size)+θ2?size?

    注意:如果我們采用多項(xiàng)式回歸模型,在運(yùn)行梯度下降算法前,特征縮放非常有必要。

    正規(guī)方程

    正規(guī)方程的概念

    正規(guī)方程提供了一種求θ的解析解法,可以不需要通過迭代一次性求得解,一步得到最優(yōu)值。

    假設(shè)對于一個代價函數(shù):J(θ)=aθ2+bθ+cJ ( \theta)=a{\theta}^{2} + b{\theta} + cJ(θ)=aθ2+bθ+c,可以通過求導(dǎo)數(shù)的方法得到使 J(θ)J(\theta)J(θ) 的最小點(diǎn) θθθ 值。

    正規(guī)方程求最小值的方式則是讓代價函數(shù)的導(dǎo)數(shù)為0,求出θ值。

    假設(shè)我們的訓(xùn)練集特征矩陣為 XXX(包含了 x0=1{{x}_{0}}=1x0?=1)并且我們的訓(xùn)練集結(jié)果為向量 yyy,則利用正規(guī)方程解出向量 θ=(XTX)?1XTy\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}yθ=(XTX)?1XTy
    上標(biāo)T代表矩陣轉(zhuǎn)置,上標(biāo)-1 代表矩陣的逆。

    正規(guī)方程的 python 實(shí)現(xiàn):

    import numpy as npdef normalEqn(X, y):theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等價于X.T.dot(X)return theta

    公式的推導(dǎo)

    θ=(XTX)?1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)?1XTy 的推導(dǎo)過程:

    J(θ)=12m∑i=1m(hθ(x(i))?y(i))2J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}}J(θ)=2m1?i=1m?(hθ?(x(i))?y(i))2
    其中:hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn{h_{\theta}}\left( x \right)={\theta^{T}}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ?(x)=θTX=θ0?x0?+θ1?x1?+θ2?x2?+...+θn?xn?

    將向量表達(dá)形式轉(zhuǎn)為矩陣表達(dá)形式,則有J(θ)=12(Xθ?y)2J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}}J(θ)=21?(Xθ?y)2 ,其中 XXXmmmnnn 列的矩陣( mmm 為樣本個數(shù),nnn 為特征個數(shù)),θ\thetaθnnn 行 1 列的矩陣,yyymmm 行 1 列的矩陣,對J(θ)J(\theta )J(θ)進(jìn)行如下變換

    J(θ)=12(Xθ?y)T(Xθ?y)J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{T}}\left( X\theta -y \right)J(θ)=21?(Xθ?y)T(Xθ?y)

    ? =12(θTXT?yT)(Xθ?y)=\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}-{{y}^{T}} \right)\left(X\theta -y \right)=21?(θTXT?yT)(Xθ?y)

    ? =12(θTXTXθ?θTXTy?yTXθ?yTy)=\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}X\theta -{{\theta}^{T}}{{X}^{T}}y-{{y}^{T}}X\theta -{{y}^{T}}y \right)=21?(θTXTXθ?θTXTy?yTXθ?yTy)

    接下來對J(θ)J(\theta )J(θ)偏導(dǎo),需要用到以下幾個矩陣的求導(dǎo)法則:

    dAXdX=AT\frac{dAX}{dX}={{A}^{T}}dXdAX?=AT

    dXTAdX=A\frac{d{{X}^{T}}A}{dX}=AdXdXTA?=A

    dXTAXdX=2AX\frac{d{{X}^{T}}AX}{dX}=2AXdXdXTAX?=2AX

    所以有:

    ?J(θ)?θ=12(2XTXθ?XTy?(yTX)T?0)\frac{\partial J\left( \theta \right)}{\partial \theta }=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{}({{y}^{T}}X )^{T}-0 \right)?θ?J(θ)?=21?(2XTXθ?XTy?(yTX)T?0)

    =12(2XTXθ?XTy?XTy?0)=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y -0 \right)=21?(2XTXθ?XTy?XTy?0)

    ? =XTXθ?XTy={{X}^{T}}X\theta -{{X}^{T}}y=XTXθ?XTy

    ?J(θ)?θ=0\frac{\partial J\left( \theta \right)}{\partial \theta }=0?θ?J(θ)?=0,

    則有θ=(XTX)?1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)?1XTy

    梯度下降法 VS 正規(guī)方程

    梯度下降正規(guī)方程
    需要選擇學(xué)習(xí)率 α\alphaα不需要 α\alphaα
    需要多次迭代一次運(yùn)算即可
    當(dāng)特征數(shù)量 nnn 大時也能較好適用需要計(jì)算(XTX)?1{{\left( {{X}^{T}}X \right)}^{-1}}(XTX)?1 ,如果特征數(shù)量n較大則運(yùn)算代價大,速度慢
    適用于各種類型的模型只適用于線性模型,不適合邏輯回歸模型等其他模型

    選擇梯度下降法還是正規(guī)方程法,我們可以根據(jù)特征量n的多少來決定。只要特征變量的數(shù)目并不大,標(biāo)準(zhǔn)方程是一個很好的計(jì)算參數(shù)的替代方法。具體地說,只要特征變量數(shù)量小于一萬,通常使用標(biāo)準(zhǔn)方程法,而不使用梯度下降法。

    根據(jù)具體的問題,以及你的特征變量的數(shù)量,這兩種算法都是值得學(xué)習(xí)的。

    奇異矩陣的解決辦法

    在線性代數(shù)的知識中,有些矩陣可逆,而有些矩陣不可逆。我們稱那些不可逆矩陣為 奇異矩陣 或 退化矩陣。

    對于那些不可逆的矩陣,正規(guī)方程方法是不能用的。

    矩陣不可逆的原因可能有:

  • 特征之間不獨(dú)立,如同時包含英尺為單位的尺寸和米為單位的尺寸兩個特征
  • 特征數(shù)量大于訓(xùn)練集的數(shù)量
  • 對于第一類原因,即特征之間不獨(dú)立的情況,盡量想辦法讓特征之間相互獨(dú)立,比如統(tǒng)一單位 等。

    對于第二類原因,即特征量大于訓(xùn)練集數(shù)目的情況,提出兩種解決方法:

  • 刪除一些多余的或者不會影響到正規(guī)方程的特征
  • 使用 正則化(Regularization) 方法(以后會提到)
  • 在大多數(shù)線性回歸問題中,出現(xiàn)不可逆矩陣的情況極少發(fā)生,通常情況下我們都能通過正規(guī)方程順利解決問題。

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的吴恩达机器学习(第四章)——多变量线性回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。