吴恩达机器学习(第四章)——多变量线性回归
第四章-多變量線性回歸
文章目錄
- 第四章-多變量線性回歸
- 多功能
- 多元梯度下降法
- 梯度下降算法
- 特征縮放
- 學習率
- 特征與多項式回歸
- 正規方程
- 正規方程的概念
- 公式的推導
- 梯度下降法 VS 正規方程
- 奇異矩陣的解決辦法
多功能
我們探討了單變量/特征的回歸模型,現在我們對房價模型增加更多的特征,樓層數、臥室數、使用年數等會影響房屋的價格,構成一個含有多個變量的模型,模型中的特征為(x1,x2,x3,...,xn)\left( {x_{1}},{x_{2}},{x_{3}}, ... ,{x_{n}} \right)(x1?,x2?,x3?,...,xn?)。
我們引入一系列新的標記:
- nnn 代表特征的數量
- x(i){x^{\left( i \right)}}x(i) 代表第 iii 個訓練實例,是特征矩陣中的第 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 個訓練實例的第 jjj 個特征。比如上圖的 x2(2)=3x_{2}^{\left( 2 \right)}=3x2(2)?=3
單個特征變量的線性回歸假設為 hθ(x)=θ0+θ1xh_\theta \left( x \right)=\theta_{0} + \theta_{1}xhθ?(x)=θ0?+θ1?x
多個特征變量的線性回歸假設為 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 個參數和 nnn 個變量
為了使得公式能夠簡化一些,引入 x0=1x_{0}=1x0?=1,則公式轉化為: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?
現在,特征向量 xxx 是一個從 0開始標記的 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,
同時把參數 θθθ 也看做一個向量 θ=[θ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
那么假設公式可以寫為 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,上標TTT代表矩陣轉置。
用多個特征量或變量來預測y,這就是多元線性回歸( Multiple linear regression)
多元梯度下降法
梯度下降算法
與單變量線性回歸類似,在多變量線性回歸中,我們也構建一個代價函數,這個代價函數是所有建模誤差的平方和,即: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=1∑m?(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?
多變量線性回歸的批量梯度下降算法為:
當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=1∑m?(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=1∑m?(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=1∑m?(hθ?(x(i))?y(i))x2(i)?
我們開始隨機選擇一系列的參數值,計算所有的預測結果后,再給所有的參數一個新的值,如此循環直到收斂。
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)
例如有兩個特征值:
以兩個參數分別為橫縱坐標,繪制代價函數的等高線圖能,看出圖像會顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。解決的方法是嘗試將所有特征的尺度都盡量縮放到-1到1之間。
通常,執行特征縮放的目的是將特征的取值約束到-1到+1的范圍內。(-1,+1),這個范圍可以靈活的選擇,只要不是太大或太小是可接受的。
在特征縮放中,有時會進行稱為 均值歸一化(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? ;臥室的數量取值在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.5≤x1?≤0.5,?0.5≤x2≤0.5-0.5≤x_{2}≤0.5?0.5≤x2?≤0.5 。注意這里不能應用于 x0x_{0}x0? ,因為x0x_{0}x0? 永遠為 1。
更一般的規律: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?) ,也可以把它設置為標準差。
特征縮放不必太精準,它只是為了讓梯度下降能夠運行的更快一點,讓迭代的次數更少一點。
學習率
梯度下降算法收斂所需要的迭代次數根據模型的不同而不同,我們不能提前預知,我們可以繪制迭代次數和代價函數的圖表來觀測算法在何時趨于收斂。
橫軸表示的是迭代次數,縱軸表示的是代價函數每次迭代之后的結果。
介紹一種自動測試是否收斂的方法,如果代價函數 J(θ)J({\theta})J(θ) 一步迭代后的下降小于某個閥值 ε(一般ε ≤ 10?310^{-3}10?3),這個測試就判斷函數已經收斂。
但是通常要選擇一個合適的閾值 ε 是非常困難的,所以通過上述的圖像判斷更加清晰可靠。
如果從圖像中看到代價函數 J(θ)J({\theta})J(θ) 一直在上升或者持續地先下降又上升,這意味著我們要選擇更小的學習率 ααα
數學家已經證明,只要選擇足夠小的學習率 ααα ,那么每次迭代之后的代價函數 J(θ)J({\theta})J(θ) 都會下降。
總結:
- 如果 α 太小,即學習速率太小,梯度下降法會收斂得很慢
- 如果 α 太大,梯度下降法每次下降很快,可能會越過最小值,甚至可能無法收斂
- 通常可以考慮嘗試這些學習率:α=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
特征與多項式回歸
房價問題
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。
線性回歸并不適用于所有數據,有時我們需要曲線來適應我們的數據,比如一個二次方模型: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?
通常我們需要先觀察數據然后再決定準備嘗試怎樣的模型。 另外,我們可以令:x2=x22,x3=x33{{x}_{2}}=x_{2}^{2},{{x}_{3}}=x_{3}^{3}x2?=x22?,x3?=x33?,從而將模型轉化為線性回歸模型。
根據函數圖形特性,我們還可以使: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?
注意:如果我們采用多項式回歸模型,在運行梯度下降算法前,特征縮放非常有必要。
正規方程
正規方程的概念
正規方程提供了一種求θ的解析解法,可以不需要通過迭代一次性求得解,一步得到最優值。
假設對于一個代價函數:J(θ)=aθ2+bθ+cJ ( \theta)=a{\theta}^{2} + b{\theta} + cJ(θ)=aθ2+bθ+c,可以通過求導數的方法得到使 J(θ)J(\theta)J(θ) 的最小點 θθθ 值。
正規方程求最小值的方式則是讓代價函數的導數為0,求出θ值。
假設我們的訓練集特征矩陣為 XXX(包含了 x0=1{{x}_{0}}=1x0?=1)并且我們的訓練集結果為向量 yyy,則利用正規方程解出向量 θ=(XTX)?1XTy\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}yθ=(XTX)?1XTy 。
上標T代表矩陣轉置,上標-1 代表矩陣的逆。
正規方程的 python 實現:
公式的推導
θ=(XTX)?1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)?1XTy 的推導過程:
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=1∑m?(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?
將向量表達形式轉為矩陣表達形式,則有J(θ)=12(Xθ?y)2J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}}J(θ)=21?(Xθ?y)2 ,其中 XXX 為 mmm 行 nnn 列的矩陣( mmm 為樣本個數,nnn 為特征個數),θ\thetaθ 為 nnn 行 1 列的矩陣,yyy 為 mmm 行 1 列的矩陣,對J(θ)J(\theta )J(θ)進行如下變換
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(θ)偏導,需要用到以下幾個矩陣的求導法則:
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 正規方程
| 需要選擇學習率 α\alphaα | 不需要 α\alphaα |
| 需要多次迭代 | 一次運算即可 |
| 當特征數量 nnn 大時也能較好適用 | 需要計算(XTX)?1{{\left( {{X}^{T}}X \right)}^{-1}}(XTX)?1 ,如果特征數量n較大則運算代價大,速度慢 |
| 適用于各種類型的模型 | 只適用于線性模型,不適合邏輯回歸模型等其他模型 |
選擇梯度下降法還是正規方程法,我們可以根據特征量n的多少來決定。只要特征變量的數目并不大,標準方程是一個很好的計算參數的替代方法。具體地說,只要特征變量數量小于一萬,通常使用標準方程法,而不使用梯度下降法。
根據具體的問題,以及你的特征變量的數量,這兩種算法都是值得學習的。
奇異矩陣的解決辦法
在線性代數的知識中,有些矩陣可逆,而有些矩陣不可逆。我們稱那些不可逆矩陣為 奇異矩陣 或 退化矩陣。
對于那些不可逆的矩陣,正規方程方法是不能用的。
矩陣不可逆的原因可能有:
對于第一類原因,即特征之間不獨立的情況,盡量想辦法讓特征之間相互獨立,比如統一單位 等。
對于第二類原因,即特征量大于訓練集數目的情況,提出兩種解決方法:
在大多數線性回歸問題中,出現不可逆矩陣的情況極少發生,通常情況下我們都能通過正規方程順利解決問題。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的吴恩达机器学习(第四章)——多变量线性回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达机器学习(第三章)——线性代数回顾
- 下一篇: 吴恩达机器学习(第五章)——Logist