单变量线性回归
1?模型表示
參考視頻:?2 - 1 - Model Representation (8 min).mkv
本課程講解的第一個(gè)算法為"回歸算法",本節(jié)將要講解到底什么是Model。下面,以一個(gè)房屋交易問題為例開始講解,如下圖所示(從中可以看到監(jiān)督學(xué)習(xí)的基本流程)。
所使用的數(shù)據(jù)集為俄勒岡州波特蘭市的住房價(jià)格,根據(jù)數(shù)據(jù)集中的不同房屋尺寸所對應(yīng)的出售價(jià)格,繪制出了數(shù)據(jù)集;假如,現(xiàn)在有朋友想要出售自己的房子,例如,大小是1250平方尺,你需要告訴他,這個(gè)房子可以買到多少錢?你可以做的一件事情是,構(gòu)造一個(gè)模型,從數(shù)據(jù)模型來看,也許是條直線,然后,你可以告訴你的朋友,他的房子大概可以賣到220000美元。這就是一個(gè)監(jiān)督學(xué)習(xí)方法的例子,因?yàn)?#xff0c;我們對數(shù)據(jù)集中的每個(gè)樣本都給出了"正確答案"(對于某一尺寸的房子來說,我們給出了該房子的正確售價(jià))。更加具體地講,這是一個(gè)回歸問題,"回歸"一詞是指,根據(jù)之前的數(shù)據(jù)預(yù)測出一個(gè)準(zhǔn)確的輸出值。還有另外一種監(jiān)督學(xué)習(xí)方法,叫做分類問題,例如,如果我們正在尋找癌癥腫瘤并想要確定腫瘤是良性的還是惡性的,這就是0/1離散輸出問題。
更進(jìn)一步來說,在監(jiān)督學(xué)習(xí)中,我們有一個(gè)數(shù)據(jù)集,這個(gè)數(shù)據(jù)集被稱為訓(xùn)練集。對于房價(jià)的例子來說,我們有一個(gè)包含不同尺寸大小的房屋所對應(yīng)的價(jià)格的訓(xùn)練集,而我們的任務(wù)就是從這個(gè)數(shù)據(jù)集中習(xí)、預(yù)測房屋價(jià)格。
下面,來定義一些本課程要用到的各種符號:
m:訓(xùn)練集中實(shí)例的數(shù)量(訓(xùn)練集中的訓(xùn)練樣本個(gè)數(shù));
x:特征/輸入變量;
y?:目標(biāo)變量/輸出變量(也就是預(yù)測結(jié)果);
(x,y):訓(xùn)練集中的實(shí)例(一個(gè)訓(xùn)練樣本,表中的每一行為一個(gè)訓(xùn)練樣本);
(x(i),?y(i)?)?:第i個(gè)觀察實(shí)例(第i個(gè)訓(xùn)練樣本,上標(biāo)i只是一個(gè)索引,表示第幾個(gè)訓(xùn)練樣本,即表中的第i行),例如:第一個(gè)訓(xùn)練樣本的x值為2104、y值為460;第二個(gè)訓(xùn)練樣本的x值為1416、y值為232。
下面,看一下房屋預(yù)測的基本流程,如下圖所示,要解決房價(jià)預(yù)測問題,需要按照如下步驟進(jìn)行:
那么,這里的h應(yīng)該如何表達(dá)呢?一種可能的表達(dá)方式為:h(x)=θ0+θ1x。因?yàn)橹缓幸粋€(gè)特征/輸入變量,因此這樣的問題叫作單變量線性回歸問題。(h表達(dá)中的參數(shù)如何求解呢?需要通過最小化代價(jià)函數(shù),下面幾節(jié)中將會介紹)
2.2?代價(jià)函數(shù)
參考視頻:?2 - 2 - Cost Function (8 min).mkv
本節(jié)將要定義什么是代價(jià)函數(shù),這將有助于我們把最有可能的直線與給定的數(shù)據(jù)相擬合。
如上圖圖所示,是線性回歸中所用到的一個(gè)數(shù)據(jù)集,注意,m是訓(xùn)練集中樣本的個(gè)數(shù),而我們的假設(shè)函數(shù)(也就是用來進(jìn)行預(yù)測的函數(shù))具有形式:h(x)=θ0+θ1x。引入術(shù)語:將θ0?和θ1稱為模型參數(shù)。下面,討論如何計(jì)算得到θ0?和θ1。
如下圖所示,選擇不同的模型參數(shù),會得到不同的假設(shè)函數(shù),下圖給出了三個(gè)例子。
對于房屋預(yù)測問題,我們現(xiàn)在要做的便是為我們的模型h選擇合適的參數(shù)(parameters)θ0?和θ1,使得由假設(shè)函數(shù)所表示的直線盡可能與給定的數(shù)據(jù)點(diǎn)較好地?cái)M合。那么,該如何計(jì)算θ0?和θ1呢?基本思想:如果該模型比較合理,就應(yīng)該使數(shù)據(jù)集中每一個(gè)房屋在該模型下的預(yù)測價(jià)格和該房屋的實(shí)際價(jià)格盡可能地接近,所以,可以利用一個(gè)最小化問題求解θ0?和θ1。于是,問題轉(zhuǎn)化為:求解θ0?和θ1,使得訓(xùn)練集中的所有樣本的預(yù)測值和真實(shí)值的差的平方和最小,這就是線性回歸的目標(biāo)函數(shù)。按照慣例,將這個(gè)代價(jià)函數(shù)寫為:
????
這個(gè)代價(jià)函數(shù)也稱為Squared error function(對于回歸問題來說,誤差平方和函數(shù)是一個(gè)比較合適、常用的選擇,當(dāng)然,也可以選擇一些其他形式的代價(jià)函數(shù))。
也許這個(gè)函數(shù)J(θ0,θ1)有點(diǎn)抽象,可能你仍然不知道它的內(nèi)涵,在接下來的幾個(gè)視頻里我們要更進(jìn)一步解釋,代價(jià)函數(shù)J的工作原理,并嘗試更直觀地解釋它在計(jì)算什么,以及我們使用它的目的。
2.3?代價(jià)函數(shù)的直觀理解I:僅有一個(gè)模型參數(shù)時(shí)
參考視頻:?2 - 3 - Cost Function - Intuition I (11 min).mkv
上一小節(jié)的視頻給出了代價(jià)函數(shù)在數(shù)學(xué)上的定義,本小節(jié)將通過一些例子來講述代價(jià)函數(shù)的直觀意義到底是什么,并且講述如何使用它。
首先,對上節(jié)內(nèi)容進(jìn)行回顧,如下圖所示,我們想要用一條直線來擬合我們的數(shù)據(jù),用參數(shù)θ0?和θ1得到假設(shè)h,而通過選擇不同的θ0?和θ1,可以得到不同的擬合直線;在本小節(jié)中,為了更好地講述代價(jià)函數(shù),我們使用一個(gè)簡化的假設(shè)函數(shù),將θ0?看做等于0,從而,優(yōu)化函數(shù)將只有一個(gè)參數(shù)θ1。(將假設(shè)函數(shù)看做經(jīng)過原點(diǎn)的直線(θ0?=0)可以更好地解釋代價(jià)函數(shù)。)
接下來利用簡化的假設(shè)函數(shù)(θ0?=0)來理解兩個(gè)重要的函數(shù):假設(shè)函數(shù)h和代價(jià)函數(shù)J,實(shí)際上,假設(shè)函數(shù)h是一個(gè)關(guān)于房屋大小x的函數(shù),代價(jià)函數(shù)是一個(gè)關(guān)于參數(shù)θ1的函數(shù),θ1控制著這個(gè)函數(shù)的斜率。下面,給定一組簡單的訓(xùn)練集,其中有三個(gè)樣本:(1,1)、(2,2)、(3,3),當(dāng)假設(shè)函數(shù)的參數(shù)取值θ1不同時(shí),相應(yīng)的代價(jià)函數(shù)取值也會不同,下面,考察代價(jià)函數(shù)的取值與θ1的取值之間的關(guān)系(分別以幾個(gè)不同θ1取值為例)。
當(dāng)θ1=1時(shí)(如下圖所示),畫出假設(shè)函數(shù),計(jì)算此時(shí)代價(jià)函數(shù)的取值J(θ1=1)=0;
當(dāng)θ1=0.5時(shí)(如下圖所示),畫出假設(shè)函數(shù),計(jì)算此時(shí)代價(jià)函數(shù)的取值J(θ1=0.5)=0.58。從圖中可以看到,代價(jià)函數(shù)其實(shí)就是假設(shè)函數(shù)中,豎直線段線段的平方和(從樣本點(diǎn)做平行于y軸的直線,它與假設(shè)函數(shù)交點(diǎn)為預(yù)測值,所有樣本點(diǎn)和預(yù)測點(diǎn)之間的線段長度平方和即為代價(jià)函數(shù)J);
再將θ1分別取0、1.5、2.5等數(shù)值,分別計(jì)算J的取值,如下圖所示。然后,將θ1取值不同時(shí)所對應(yīng)的不同J值所對應(yīng)的數(shù)據(jù)點(diǎn)繪制出來,如下側(cè)右圖所示,可以看到,當(dāng)J的取值不同時(shí),對應(yīng)于不同的假設(shè)函數(shù);反之,不同的假設(shè)函數(shù)也對應(yīng)于不同的代價(jià)函數(shù)取值,而學(xué)習(xí)算法的目標(biāo)是最小化目標(biāo)函數(shù)。
從下圖中可以看到,當(dāng)θ1=1時(shí),J取得最小值0,而該J對應(yīng)的假設(shè)函數(shù)正好比較好地?cái)M合出了數(shù)據(jù)集中的樣本點(diǎn),這就比較直觀地解釋了為什么通過最小化代價(jià)函數(shù)可以得到一個(gè)最佳的擬合直線。
本小節(jié)通過一些圖像理解了代價(jià)函數(shù),為了簡化算法,讓θ0=0,從而,代價(jià)函數(shù)只有一個(gè)參數(shù)θ1=0;下一節(jié)中,將回到原來的問題,即不再讓讓θ0=0。注意到:我們選擇的參數(shù)決定了我們得到的直線相對于我們的訓(xùn)練集的準(zhǔn)確程度,模型所預(yù)測的值與訓(xùn)練集中實(shí)際值之間的差距就是建模誤差(modeling error)。
2.4?代價(jià)函數(shù)的直觀理解II:有兩個(gè)模型參數(shù)時(shí)
參考視頻:?2 - 4 - Cost Function - Intuition II (9 min).mkv
本小節(jié)將進(jìn)一步理解代價(jià)函數(shù)(需要用到輪廓圖)。與上一小節(jié)相同,來看一下假設(shè)函數(shù)、模型參數(shù)、代價(jià)函數(shù)、優(yōu)化目標(biāo)函數(shù),所不同的是,這里不再假設(shè)θ0=0,而J是θ0和θ1的函數(shù)。
下面,理解假設(shè)函數(shù)和代價(jià)函數(shù),如下圖所示,給出了某房屋價(jià)格數(shù)據(jù)集。首先,構(gòu)造某種假設(shè)函數(shù),以下圖所示的黑色直線為例(雖然它不是一個(gè)好的假設(shè)函數(shù),但暫且這樣假設(shè))。同樣,對不同的θ0和θ1取值,可以得到代價(jià)函數(shù)的函數(shù)曲線。
當(dāng)h只有一個(gè)參數(shù)時(shí),代價(jià)函數(shù)J的圖形將是如上圖右側(cè)所示的碗裝函數(shù)。但現(xiàn)在J有兩個(gè)參數(shù):θ0和θ1,J的函數(shù)圖形仍然呈現(xiàn)出碗裝形狀,但變?yōu)榱硕S圖形,如下圖所示。
對于不同的假設(shè)函數(shù),代價(jià)函數(shù)取值不同。接下來,為了描述方面,不再使用這個(gè)三維圖形,而是使用contour figure。如下右圖所示,就是contour figure,同一橢圓上的點(diǎn),代表J取值相同。如下側(cè)右圖所示,θ0=800這點(diǎn)對應(yīng)于左圖中的直線,可以看到,這條直線并不能很好地?cái)M合數(shù)據(jù)集,并且注意到,θ0=800這點(diǎn)距離J的最小值點(diǎn)還很遠(yuǎn),也就是說這個(gè)代價(jià)函數(shù)還很大。
接下來,再看幾個(gè)例子,從下面幾幅圖中的例子可以看到,通過不斷地降低J的取值,可以找到較好的擬合直線(即隨著J值得降低,所對應(yīng)的直線實(shí)現(xiàn)了對數(shù)據(jù)集更好的擬合)。
在實(shí)際中,我們需要能夠通過自動化的方式找到θ0和θ1的取值,下一小節(jié),主要就要介紹這個(gè)內(nèi)容。
?
2.5?梯度下降
參考視頻:?2 - 5 - Gradient Descent (11 min).mkv
下圖給出了一個(gè)代價(jià)函數(shù)J(θ0,?θ1),它可能是在線性回歸問題中構(gòu)造出的,也可能是其他問題中構(gòu)造出的。對于梯度下降法,它可以用于優(yōu)化含有多個(gè)參數(shù)的代價(jià)函數(shù),但這里僅以兩個(gè)參數(shù)為例。下面介紹梯度下降的構(gòu)想。
首先對θ0和θ1?設(shè)定一些初步猜測值(即賦予初值),這些值到底取為什么其實(shí)并不重要,但通常的選擇是將θ0和θ1都設(shè)為0(即將θ0和θ1都初始化為0)。接下來要做的就是不停地一點(diǎn)點(diǎn)地改變θ0和θ1,試圖通過這種改變使得J(θ0,?θ1)變小,直到我們找到J的最小值(或許是局部最小值)。
下面通過一些圖片來觀察梯度下降法是如何工作的:如下圖所示,試圖讓代價(jià)函數(shù)J(θ0,?θ1)最小,坐標(biāo)軸θ0和θ1在水平軸上,而函數(shù)J在垂直坐標(biāo)軸上,圖形表面高度即為J的值。我們希望最小化代價(jià)函數(shù)J(θ0,?θ1):從θ0和θ1的某個(gè)值出發(fā),也就是對應(yīng)于從這個(gè)函數(shù)表面上的某個(gè)起始點(diǎn)出發(fā)(不管θ0和θ1的取值是多少,將它們初始化為0,但有時(shí)也可把它們初始化為其他值);可以把這個(gè)圖形想象為一座山,想象正站立在山的點(diǎn)A上,在梯度下降算法中,我們要做的就是旋轉(zhuǎn)360度,看看我們的周圍并問自己,我要在某個(gè)方向上,用小碎步盡快下山,這些小碎步需要朝什么方向?找到最快下降方向后,邁出一步,然后再環(huán)顧四周,找到最快下降方向,再邁出一步,如此反復(fù),直到到達(dá)局部的最低點(diǎn)。
但有一個(gè)問題,起始點(diǎn)的位置不同時(shí),會得到完全不同的局部最優(yōu)解(分別以下側(cè)右圖所示的點(diǎn)A和點(diǎn)B為初始點(diǎn)時(shí),得到的局部最優(yōu)解不同)。這就是梯度下降算法的一個(gè)特點(diǎn)。
?
下面,看一下梯度下降法的定義,如下圖所示。這個(gè)公式有很多細(xì)節(jié)問題:
(1):=?表示賦值;
(2)α?是一個(gè)數(shù)字,被稱為學(xué)習(xí)速率,它控制了我們下山時(shí)會邁出多大的步子,因此如果α值很大,那么相應(yīng)的梯度下降過程中我們會試圖用大步子下山,如果α值很小,那么我們會邁著很小的小碎步下山(關(guān)于如何設(shè)置α的值等內(nèi)容,在之后的課程中會再講解);
(3)微分項(xiàng)(代價(jià)函數(shù)的導(dǎo)數(shù))在下一小節(jié)中將會講到。
(4)同時(shí),要注意,這里的梯度下降法為批量梯度下降法,我們每一次都同時(shí)讓所有的參數(shù)減去學(xué)習(xí)速率乘以代價(jià)函數(shù)的導(dǎo)數(shù)。
梯度下降背后的思想:開始時(shí)隨機(jī)選擇一個(gè)參數(shù)的組合(θ0,θ1,...,θn),計(jì)算代價(jià)函數(shù),然后我們尋找下一個(gè)能讓代價(jià)函數(shù)值下降最多的參數(shù)組合。持續(xù)這么做直到找到一個(gè)局部最小值(local minimum)。因?yàn)椴]有嘗試完所有的參數(shù)組合,所以不能確定所得到的局部最小值是否為全局最小值(global minimum),選擇不同的初始參數(shù)組合,可能會找到不同的局部最小值。
2.6?梯度下降的直觀理解
參考視頻:?2 - 6 - Gradient Descent Intuition (12 min).mkv
本小節(jié)主要介紹梯度下降法是做什么的,以及梯度下降算法的更新過程有什么意義。下圖給出了上一小節(jié)中給出的梯度下降算法,其中:參數(shù)α稱為學(xué)習(xí)速率,它控制我們以多大的幅度更新參數(shù)θj。本小節(jié)將要給這個(gè)式子一個(gè)直觀的認(rèn)識,并且介紹式中的兩部分(learning rate和derivative)的作用以及為什么當(dāng)把這兩部分放一起時(shí)整個(gè)更新過程是有意義的。
以一個(gè)稍微簡單的情況為例:代價(jià)函數(shù)J只有一個(gè)參數(shù)θ1,那么我們可以畫出一維曲線,接下來試著去理解為什么梯度下降法會在這個(gè)代價(jià)函數(shù)J上起作用。如下圖所示,給出了J(θ1)的曲線,并且在其上給出了一個(gè)初始化點(diǎn)θ1(下圖左側(cè)所示),接下來要做的就是對θ1進(jìn)行不斷的更新:
此處求導(dǎo)的目的就是要求解初始點(diǎn)處的切線,該切線的斜率就是式中的偏導(dǎo)數(shù),這里的斜率是一個(gè)大于0的數(shù),所以,θ1減去一個(gè)正數(shù)乘以學(xué)習(xí)速率(也是正數(shù)),會使θ1的取值變小,所以θ1的取值會向著最低點(diǎn)的位置移動。下圖右側(cè)給出了初始點(diǎn)在另外位置處的情況。
?
接下來,分析一下α(學(xué)習(xí)率、learning rate),下圖中給出了更新的規(guī)律:可以看到,當(dāng)α較小時(shí),需要很多步才能走到最低點(diǎn)(baby steps);當(dāng)α較大時(shí),可能會出現(xiàn)發(fā)散的情況。
如果我們事先把初始點(diǎn)放在一個(gè)局部極小值處時(shí),下一步迭代該如何走呢?
下面,解釋一下為什么學(xué)習(xí)率不變時(shí),梯度下降法也可以收斂到局部最優(yōu)解,如下圖所示,首先初始化梯度下降算法,初始點(diǎn)為點(diǎn)A,這一點(diǎn)處的梯度相當(dāng)?shù)亩?#xff0c;所以,下一步更新邁的步子會比較大,到新的更新點(diǎn)處后,導(dǎo)數(shù)沒那么大了,所以不再會邁那么大的步子,再接著往下走,越來越接近最優(yōu)值,梯度越來越小,邁的步子也越來越小,也就是說,隨著梯度下降法的運(yùn)行,移動的幅度會自動變得越來越小,直到收斂到一個(gè)局部極小值。
2.7?梯度下降的線性回歸
參考視頻:?2 - 7 - GradientDescentForLinearRegression (6 min).mkv
本小節(jié)將要回歸到線性回歸的本質(zhì)問題,即代價(jià)函數(shù)中有兩個(gè)參數(shù)的情況。如下圖所示,左側(cè)是梯度下降法,右側(cè)是線性回歸。接下來要做的就是用左側(cè)的梯度下降法來最小化平方誤差代價(jià)函數(shù)。可以看到,其中的關(guān)鍵問題就是求出代價(jià)函數(shù)的導(dǎo)數(shù)。
下面,討論如何計(jì)算出代價(jià)函數(shù)的導(dǎo)數(shù)。
其中:()
計(jì)算出代價(jià)函數(shù)的導(dǎo)數(shù)后,將它們代入到梯度下降法中,可以得到下圖所示算法,在執(zhí)行梯度下降法時(shí)有一個(gè)需要注意的細(xì)節(jié):兩個(gè)參數(shù)要同時(shí)更新。
下面,看一下梯度下降法是如何工作的。對于下圖所示的代價(jià)函數(shù),當(dāng)初始位置不同時(shí),可能會收斂到不同的局部最優(yōu)解。
但對于線性回歸問題,代價(jià)函數(shù)是一個(gè)碗裝的函數(shù)(凸函數(shù)),該函數(shù)只有一個(gè)全局最優(yōu)解,所以,利用梯度下降法,總是會收斂到全局最優(yōu)解。
下面,看一些梯度下降法的執(zhí)行過程:
?
?
?
?
最后,給出一個(gè)定義:批量梯度下降法。即在進(jìn)行梯度下降法的過程中,每一次迭代都用到了所有的訓(xùn)練樣本,就是說,每次更新都需要考慮這一"批"樣本。也有些梯度下降法,每次更新時(shí)只考了部分樣本,這個(gè)以后再做介紹。
2.8?接下來的內(nèi)容
在接下來的一組視頻中,將對線性代數(shù)進(jìn)行一個(gè)快速的復(fù)習(xí)回顧。如果你從來沒有接觸過向量和矩陣,那么這課件上所有的一切對你來說都是新知識,或者你之前對線性代數(shù)有所了解,但由于隔得久了,對其有所遺忘,那就請學(xué)習(xí)接下來的一組視頻,我會快速地回顧你將用到的線性代數(shù)知識。
通過它們,你可以實(shí)現(xiàn)和使用更強(qiáng)大的線性回歸模型。事實(shí)上,線性代數(shù)不僅僅在線性回歸中應(yīng)用廣泛,它其中的矩陣和向量將有助于幫助我們實(shí)現(xiàn)之后更多的機(jī)器學(xué)習(xí)模型,并在計(jì)算上更有效率。正是因?yàn)檫@些矩陣和向量提供了一種有效的方式來組織大量的數(shù)據(jù),特別是當(dāng)我們處理巨大的訓(xùn)練集時(shí),如果你不熟悉線性代數(shù),如果你覺得線性代數(shù)看上去是一個(gè)復(fù)雜、可怕的概念,特別是對于之前從未接觸過它的人,不必?fù)?dān)心,事實(shí)上,為了實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法,我們只需要一些非常非常基礎(chǔ)的線性代數(shù)知識。通過接下來幾個(gè)視頻,你可以很快地學(xué)會所有你需要了解的線性代數(shù)知識。具體來說,為了幫助你判斷是否有需要學(xué)習(xí)接下來的一組視頻,我會討論什么是矩陣和向量,談?wù)勅绾渭?/span>、減、乘矩陣和向量,討論逆矩陣和轉(zhuǎn)置矩陣的概念。
如果你十分熟悉這些概念,那么你完全可以跳過這組關(guān)于線性代數(shù)的選修視頻,但是如果你對這些概念仍有些許的不確定,不確定這些數(shù)字或這些矩陣的意思,那么請看一看下一組的視頻,它會很快地教你一些你需要知道的線性代數(shù)的知識,便于之后編寫機(jī)器學(xué)習(xí)算法和處理大量數(shù)據(jù)。
總結(jié)
- 上一篇: HMM隐马尔可夫
- 下一篇: Kmeans算法介绍及其实现