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