吳恩達(dá)-機(jī)器學(xué)習(xí)-第二周

多變量線性回歸(Linear Regression with Multiple Variables)

多維特征

n 代表特征的數(shù)量

{x^{\left( i \right)}}代表第 i 個(gè)訓(xùn)練實(shí)例,是特征矩陣中的第i行,是一個(gè)向量(vector)。

比方說(shuō),上圖的

{x}^{(2)}\text{=}\begin{bmatrix} 1416\\ 3\\ 2\\ 40 \end{bmatrix},

{x}_{j}^{\left( i \right)}代表特征矩陣中第 i 行的第 j 個(gè)特征,也就是第 i 個(gè)訓(xùn)練實(shí)例的第 j 個(gè)特征。
如上圖的x_{2}^{\left( 2 \right)}=3,x_{3}^{\left( 2 \right)}=2,

支持多變量的假設(shè) h 表示為:
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}},
這個(gè)公式中有n+1個(gè)參數(shù)和n個(gè)變量,為了簡(jiǎn)化表示,引入x_{0}=1,則公式轉(zhuǎn)化為:h_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}

此時(shí)模型中的參數(shù)和任何一個(gè)訓(xùn)練實(shí)例都是n+1維的向量, 因此公式可以簡(jiǎn)化為:h_{\theta} \left( x \right)={\theta^{T}}X(其中上標(biāo)T代表矩陣轉(zhuǎn)置)。

多變量梯度下降

與單變量線性回歸類似,在多變量線性回歸中,我們也構(gòu)建一個(gè)代價(jià)函數(shù),則這個(gè)代價(jià)函數(shù)是所有建模誤差的平方和,即:J\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}}}

其中:h_{\theta}\left( x \right)=\theta^{T}X={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} ,

單變量和多變量

我們的目標(biāo)和單變量線性回歸問(wèn)題中一樣,是要找出使得代價(jià)函數(shù)最小的一系列參數(shù)。 多變量線性回歸的批量梯度下降算法為:

即:

求導(dǎo)后得到:

當(dāng)n>=1時(shí), {{\theta }*{0}}:={{\theta }*{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}*{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x*{0}^{(i)}

{{\theta }*{1}}:={{\theta }*{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}*{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x*{1}^{(i)}

{{\theta }*{2}}:={{\theta }*{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}*{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x*{2}^{(i)}

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

代碼示例:

計(jì)算代價(jià)函數(shù) J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}} 其中:{h_{\theta}}\left( x \right)={\theta^{T}}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}

Python 代碼:

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

梯度下降法實(shí)踐1-特征縮放

在我們面對(duì)多維特征問(wèn)題的時(shí)候,我們要保證這些特征都具有相近的尺度,這將幫助梯度下降算法更快地收斂。

以房?jī)r(jià)問(wèn)題為例,假設(shè)我們使用兩個(gè)特征,房屋的尺寸和房間的數(shù)量,尺寸的值為 0-2000平方英尺,而房間數(shù)量的值則是0-5,以兩個(gè)參數(shù)分別為橫縱坐標(biāo),繪制代價(jià)函數(shù)的等高線圖能,看出圖像會(huì)顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。

解決的方法是嘗試將所有特征的尺度都盡量縮放到-1到1之間。這個(gè)范圍根據(jù)經(jīng)驗(yàn)來(lái)定,比如-3到3或者-\frac{1}{3}\frac{1}{3}可以接受,但若是-0.001到0.001或者-100到100就太大了。如圖:

image.png

最簡(jiǎn)單的方法是令:normalized feature: {{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}},其中 {\mu_{n}}是平均值,{s_{n}}是標(biāo)準(zhǔn)差或者范圍(最大值-最小值)。

梯度下降法實(shí)踐2-學(xué)習(xí)率

梯度下降算法收斂所需要的迭代次數(shù)根據(jù)模型的不同而不同,我們不能提前預(yù)知,我們可以繪制迭代次數(shù)和代價(jià)函數(shù)的圖表來(lái)觀測(cè)算法在何時(shí)趨于收斂。



可以看出300到400次迭代后接近收斂。

也有一些自動(dòng)測(cè)試是否收斂的方法,例如將代價(jià)函數(shù)的變化值與某個(gè)閥值\epsilon(例如0.001)進(jìn)行比較,但通常合適閥值比較難以確定。所以看圖更清晰。

正確的J(θ)曲線每次迭代應(yīng)該是下降的。
梯度下降算法的每次迭代受到學(xué)習(xí)率的影響,如果學(xué)習(xí)率\alpha過(guò)小,則達(dá)到收斂所需的迭代次數(shù)會(huì)非常高。
(If α is too small: slow convergence)
如果學(xué)習(xí)率\alpha過(guò)大,每次迭代可能不會(huì)減小代價(jià)函數(shù),會(huì)越過(guò)局部最小值導(dǎo)致無(wú)法收斂。
(If α is too large: J(θ) may not decrease on every iterration, may not converge)


合適的學(xué)習(xí)率保證了正確和效率。

通??梢钥紤]嘗試些學(xué)習(xí)率:
(按3倍)
\alpha=0.001,0.003,0.01,0.03,0.1,0.3,1,3,10

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

如房?jī)r(jià)預(yù)測(cè)問(wèn)題,

h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}\times{frontage}+{\theta_{2}}\times{depth}

{x_{1}}=frontage(臨街寬度),{x_{2}}=depth(縱向深度),我們選擇更合適的 x=frontage*depth=area(面積)作為特征,則:{h_{\theta}}\left( x \right)={\theta_{0}}+{\theta_{1}}x。 線性回歸并不適用于所有數(shù)據(jù),有時(shí)我們需要曲線來(lái)適應(yīng)我們的數(shù)據(jù),比如一個(gè)二次方模型:h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2} 或者三次方模型: h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}

選擇合適的特征和得到更適合的模型。
要根據(jù)數(shù)據(jù)模型選擇合適的函數(shù)模型來(lái)擬合。
注:如果我們采用多項(xiàng)式回歸模型,在運(yùn)行梯度下降算法前,特征縮放非常有必要。

正規(guī)方程(normal equation)

到目前為止,我們都在使用梯度下降算法,但是對(duì)于某些線性回歸問(wèn)題,正規(guī)方程方法是更好的解決方案。如:
先假設(shè)θ屬于實(shí)數(shù):


正規(guī)方程是通過(guò)求解下面的方程來(lái)找出使得代價(jià)函數(shù)最小的參數(shù)的:\frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0 。 假設(shè)我們的訓(xùn)練集特征矩陣為 X(包含了 {{x}_{0}}=1)并且我們的訓(xùn)練集結(jié)果為向量 y,則利用正規(guī)方程解出向量 \theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y 。 上標(biāo)T代表矩陣轉(zhuǎn)置,上標(biāo)-1 代表矩陣的逆。設(shè)矩陣A={X^{T}}X,則:{{\left( {X^T}X \right)}^{-1}}={A^{-1}} 以下表示數(shù)據(jù)為例:


即:

運(yùn)用正規(guī)方程方法求解參數(shù):

Octave 中,正規(guī)方程寫(xiě)作:

pinv(X'*X)*X'*y

pinv計(jì)算逆矩陣

注: 正規(guī)方程不需要特征縮放

注:對(duì)于那些不可逆的矩陣(通常是因?yàn)樘卣髦g不獨(dú)立,如同時(shí)包含英尺為單位的尺寸和米為單位的尺寸兩個(gè)特征,也有可能是特征數(shù)量大于訓(xùn)練集的數(shù)量),正規(guī)方程方法是不能用的。

梯度下降與正規(guī)方程的比較:

梯度下降 正規(guī)方程
需要選擇學(xué)習(xí)率 不需要
需要多次迭代 一次運(yùn)算得出
當(dāng)特征數(shù)量大時(shí)也能較好適用 需要計(jì)算 ({X}^{T}X)^{-1},如果特征數(shù)量n較大則運(yùn)算代價(jià)大,因?yàn)榫仃嚹娴挠?jì)算時(shí)間復(fù)雜度為O(n^3),通常來(lái)說(shuō)當(dāng)小于10000 時(shí)還是可以接受的
適用于各種類型的模型 只適用于線性模型,不適合邏輯回歸模型等其他模型

Conclusion: 只要特征變量的數(shù)目并不大,標(biāo)準(zhǔn)方程是一個(gè)很好的計(jì)算參數(shù)的替代方法。具體地說(shuō),只要特征變量數(shù)量小于一萬(wàn),我通常使用標(biāo)準(zhǔn)方程法,而不使用梯度下降法。
隨著我們要講的學(xué)習(xí)算法越來(lái)越復(fù)雜,例如,當(dāng)我們講到分類算法,像邏輯回歸算法,我們會(huì)看到,實(shí)際上對(duì)于那些算法,并不能使用標(biāo)準(zhǔn)方程法。對(duì)于那些更復(fù)雜的學(xué)習(xí)算法,我們將不得不仍然使用梯度下降法。因此,梯度下降法是一個(gè)非常有用的算法,可以用在有大量特征變量的線性回歸問(wèn)題?;蛘呶覀円院笤谡n程中,會(huì)講到的一些其他的算法,因?yàn)闃?biāo)準(zhǔn)方程法不適合或者不能用在它們上。但對(duì)于這個(gè)特定的線性回歸模型,標(biāo)準(zhǔn)方程法是一個(gè)比梯度下降法更快的替代算法。所以,根據(jù)具體的問(wèn)題,以及你的特征變量的數(shù)量,這兩種算法都是值得學(xué)習(xí)的。

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

    
 def normalEqn(X, y):
    
   theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等價(jià)于X.T.dot(X)
    
   return theta

正規(guī)方程及不可逆性(選修)

當(dāng)計(jì)算 θ=inv(X'X ) X'y,那對(duì)于矩陣的結(jié)果是不可逆的情況咋辦呢? 如果你懂一點(diǎn)線性代數(shù)的知識(shí),你或許會(huì)知道,有些矩陣可逆,而有些矩陣不可逆。我們稱那些不可逆矩陣為奇異或退化矩陣。 問(wèn)題的重點(diǎn)在于的不可逆的問(wèn)題很少發(fā)生,在Octave里,如果你用它來(lái)實(shí)現(xiàn)的計(jì)算,你將會(huì)得到一個(gè)正常的解。在Octave里,有兩個(gè)函數(shù)可以求解矩陣的逆,一個(gè)被稱為pinv(),另一個(gè)是inv(),這兩者之間的差異是些許計(jì)算過(guò)程上的,一個(gè)是所謂的偽逆,另一個(gè)被稱為逆。即便矩陣是不可逆的,使用pinv() 函數(shù)也可計(jì)算出值。

在線性代數(shù)中的定義:
奇異矩陣指矩陣的行列式|A|是等于0,稱矩陣A為奇異矩陣;若不等于0,稱矩陣A為非奇異矩陣。 同時(shí),由|A|≠0可知矩陣A可逆,這樣可以得出另外一個(gè)重要結(jié)論:可逆矩陣就是非奇異矩陣,非奇異矩陣也是可逆矩陣。 如果A為奇異矩陣,則AX=0有無(wú)窮解,AX=b有無(wú)窮解或者無(wú)解。如果A為非奇異矩陣,則AX=0有且只有唯一零解,AX=b有唯一解。

如果矩陣中有一些多余的特征,比如是線性相關(guān)的,像x_1是以英尺為尺寸規(guī)格計(jì)算的房子,x_2是以平方米為尺寸規(guī)格計(jì)算的房子,兩個(gè)特征值將始終滿足約束:x_1=x_2*(3.28)^{2},那么矩陣是不可逆的,就可以刪除這些重復(fù)特征。因此,首先應(yīng)該通過(guò)觀察所有特征檢查是否有多余的特征,盡量用較少的特征來(lái)反映盡可能多內(nèi)容,否則我會(huì)考慮使用正規(guī)化方法。 如果矩陣是不可逆的,(通常來(lái)說(shuō),不會(huì)出現(xiàn)這種情況),如果在Octave里,可以用偽逆函數(shù)pinv() 來(lái)計(jì)算。這種使用不同的線性代數(shù)庫(kù)的方法被稱為偽逆。即使的結(jié)果是不可逆的,但算法執(zhí)行的流程是正確的。

正規(guī)方程公式的推導(dǎo):

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

J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}} 其中:{h_{\theta}}\left( x \right)={\theta^{T}}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}

將向量表達(dá)形式轉(zhuǎn)為矩陣表達(dá)形式,則有J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}} ,其中Xmn列的矩陣(m為樣本個(gè)數(shù),n為特征個(gè)數(shù)),\thetan行1列的矩陣,ym行1列的矩陣,對(duì)J(\theta )進(jìn)行如下變換

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

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

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

接下來(lái)對(duì)J(\theta )偏導(dǎo),需要用到以下幾個(gè)矩陣的求導(dǎo)法則:

-\frac{dAB}{dB}={{A}^{T}},\frac{d{{X}^{T}}AX}{dX}=2AX

(可以看:閑話矩陣求導(dǎo)
求導(dǎo)規(guī)則參考:http://files.cnblogs.com/files/leoleo/matrix_rules.pdf)

所以有:

\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)

=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y -0 \right)

? ={{X}^{T}}X\theta -{{X}^{T}}y

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

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


常用數(shù)學(xué)符號(hào)的 LaTeX 表示方法

本文數(shù)學(xué)公式使用 LaTeX
(以下內(nèi)容主要摘自“一份不太簡(jiǎn)短的 LATEX2e 介紹”

1、指數(shù)和下標(biāo)可以用^和_后加相應(yīng)字符來(lái)實(shí)現(xiàn)。比如:

2、平方根(square root)的輸入命令為:\sqrt,n 次方根相應(yīng)地為: \sqrt[n]。方根符號(hào)的大小由LATEX自動(dòng)加以調(diào)整。也可用\surd 僅給出
符號(hào)。比如:

3、命令\overline 和\underline 在表達(dá)式的上、下方畫(huà)出水平線。比如:

4、命令\overbrace 和\underbrace 在表達(dá)式的上、下方給出一水平的大括號(hào)。

5、向量(Vectors)通常用上方有小箭頭(arrow symbols)的變量表示。這可由\vec 得到。另兩個(gè)命令\overrightarrow 和\overleftarrow在定義從A 到B 的向量時(shí)非常有用。

6、分?jǐn)?shù)(fraction)使用\frac{...}{...} 排版。一般來(lái)說(shuō),1/2 這種形式更受歡迎,因?yàn)閷?duì)于少量的分式,它看起來(lái)更好些。

7、積分運(yùn)算符(integral operator)用\int 來(lái)生成。求和運(yùn)算符(sum operator)由\sum 生成。乘積運(yùn)算符(product operator)由\prod 生成。上限和下限用^ 和_來(lái)生成,類似于上標(biāo)和下標(biāo)。


附加小菜: (小技巧)

  • 分?jǐn)?shù)

(\frac{1}{m+\frac{1}{2}})

\left(\frac{1}{m+\frac{1}{2}} \right)

\left(\frac{1}{2} \right)
用\left(   \right)括起來(lái)就可以把分?jǐn)?shù)包的很好,很漂亮。
  • 矩陣

bmatrix:
{x}^{(2)}\text{=}\begin{bmatrix} 數(shù)字 \end{bmatrix}
{x}^{(2)}\text{=}\begin{bmatrix} 1416\\ 3\\ 2\\ 40 \end{bmatrix},

matrix:
{x}^{(2)}\text{=}\begin{matrix} 數(shù)字 \end{matrix}
{x}^{(2)}\text{=}\begin{matrix} 1416\\ 3\\ 2\\ 40 \end{matrix},

  • 求和符號(hào)
    \sum_{k=1}^N k^2
    \sum_{k=1}^N k^2
    \sum\limits_{i=1}^{m} k^2
    \sum\limits_{i=1}^{m} k^2

  • 代碼
    如果要標(biāo)記一小段行內(nèi)代碼,你可以用反引號(hào)把它包起來(lái),例如:
    Use the `printf()` function.
    Use the printf() function.
    一大段則使用 ```code ```

code
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • $ \LaTeX{} $歷史 $\LaTeX{}$(/?lɑ?t?x/,常被讀作/?lɑ?t?k/或/?le?t?...
    大只若于閱讀 5,926評(píng)論 0 5
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,156評(píng)論 0 2
  • #1996 AHSME ##1996 AHSME Problems/Problem 1 The addition ...
    abigtreenj閱讀 1,612評(píng)論 0 0
  • 多精度代理模型簡(jiǎn)明教程 引言本文將簡(jiǎn)要介紹kriging代理模型和多層代理模型的原理及使用方法,以及對(duì)其程序進(jìn)行簡(jiǎn)...
    zhthuuu閱讀 8,868評(píng)論 0 7
  • 轉(zhuǎn)載-劉建平Pinard-www.cnblogs.com/pinard/p/5970503.html 在求解機(jī)器學(xué)...
    商三郎閱讀 3,627評(píng)論 0 2

友情鏈接更多精彩內(nèi)容