機器學習之單變量線性回歸(Linear Regression with One Variable)


1. 模型表達(Model Representation)

我們的第一個學習算法是線性回歸算法,讓我們通過一個例子來開始。這個例子用來預測住房價格,我們使用一個數據集,該數據集包含俄勒岡州波特蘭市的住房價格。在這里,我要根據不同房屋尺寸所售出的價格,畫出我的數據集:

image

我們來看這個數據集,如果你有一個朋友正想出售自己的房子,如果你朋友的房子是1250平方尺大小,你要告訴他們這房子能賣多少錢。 那么,你可以做的一件事就是構建一個模型,也許是條直線。從這個數據模型上來看,也許你可以告訴你的朋友,他大概能以220000美元左右的價格賣掉這個房子,顯然這就是監督學習算法的一個例子。

在上一篇博文Introduction to Machine Learning,我們已經了解到之所以這個例子被稱作 Supervised Learning ,是因為對於每個數據來說,我們給出了“正確的答案”。而且,更具體來說,這是一個回歸問題。回歸一詞指的是我們根據之前的數據預測出一個准確的輸出值。對於這個例子就是價格。

同時,還有另一種最常見的 Supervised Learning 的方式叫做分類問題。更進一步來說,在 Supervised Learning 中我們有一個數據集,這個數據集被稱訓練集。因此對於房價的例子,我們有一個包含不同房屋價格的訓練集,我們的任務就是從這個訓練集中學習並預測房屋價格

現在我們給出經常使用的一些符號定義,如下:

image

用 m 來表示訓練樣本的數目,因此,在這個數據集中如果表中有47行,那么我們就有47組訓練樣本,m就等於47。

image
用小寫字母 x 來表示輸入變量,往往也被稱為特征量,就是用 x 表示輸入的特征,並且我們將用 y 來表示輸出變量或者目標變量,也就是我的預測結果,也就是上面表格的第二列。

在這里我們要使用 (x, y) 來表示一個訓練樣本,因此,在這個表格中的單獨的一行對應於一個訓​​練樣本。

為了表示某個特定的訓練樣本,我們將使用x上標(i)與y上標(i)來表示,並且用這個來表示第 i 個訓練樣本,所以上標為 i ,注意這不是求冪運算,這個(x(i), y(i)) 括號里的上標 i 只是一個索引,表示我的訓練集里的第 i 行。

我們的房屋價格預測就是一個監督學習算法的工作方式,如下圖:

image

我們可以看到這里有我們的訓練集里房屋價格,我們把它喂給我們的學習算法,進而學習得到一個函數,按照慣例,通常表示為小寫 h,h 代表 hypothesis(假設), 在此處,h 表示一個函數,其輸入是房屋尺寸大小。因此 h 根據輸入的 x 值來得出 y 值,y 值對應房子的價格。因此,h 是一個從 x到 y 的函數映射。

大家經常會有這樣的疑問:為什么這個函數被稱作假設(hypothesis)?你們中有些人可能知道 hypothesis 的意思,從字典或者其它什么方式可以查到。其實在機器學習中,這是一個在早期被用於機器學習的名稱,它有點繞口,對某些函數來說這可能不是一個很恰當的名字。例如,對表示從房屋的大小到價格的函數映射,我認為這個詞 "hypothesis" 就可能不是最好的名稱。但是這是人們在機器學習中使用的標准術語,所以我們不用太糾結人們為什么這么叫它。

小結:當解決房價預測問題時,我們實際上是要將訓練集“喂”給我們的學習算法,進而學習得一個假設 h,然后將我們要預測的房屋的尺寸作為輸入變量輸入給 h,預測出該房屋的交易價格作為輸出變量輸出為結果。

當我們在設計學習算法的時候,需要去思考的是怎樣得到這個假設 h。例如,對於我們的房價預測問題,我們該如何表達 h ? 一種可能的表達方式為:

image

因為只含有一個特征/輸入變量,因此這樣的問題叫作單變量線性回歸問題。

那么為什么是一個線性函數呢? 實際上,有時候我們會有更復雜的函數,也許是非線性函數,但是由於線性方程是簡單的形式,我們將先從線性方程的例子入手。當然,最終我們將會建立更復雜的模型以及更復雜的學習算法。

2. 代價函數(Cost Function)

接下來我們將定義代價函數的概念,這將有助於我們弄明白怎樣將最有可能的直線與我們的數據相擬合。

image

在線性回歸中我們有一個像上圖一樣的訓練集 記住 m 代表了訓練樣本的數量,例如,此處 m = 47 。

而我們的假設函數(也就是用來進行預測的函數),線性函數形式也已在上圖中表示出來了。

接下來我們引入一些術語,諸如 θ0 和 θ1 之類這些 θi 我們通常稱其為模型參數。那么我們如何選擇這兩個參數值 θ0 和 θ1 呢?選擇不同的參數   θ0 和 θ1 我們會得到不同的假設函數。例如下圖:

image

在線性回歸中,我們有一個訓練集,我們要做的就是得出 θ0 和 θ1 這兩個參數的值,來讓假設函數表示的直線盡量地與這些數據點很好的擬合。那么我們如何得出 θ0 和 θ1 的值,來使它很好地擬合數據的呢?

我們的想法是,我們要選擇能使 h(x) 輸入 x 時我們預測的值最接近該樣本對應的 y 值的參數 θ0 和 θ1 。在我們的訓練集中有一定數量的樣本,我們知道 x 表示賣出哪所房子,並且知道這所房子的實際價格,所以,我們要選擇參數值,盡量使得在訓練集中給出的 x 值,能准確地預測 y 的值。

讓我們給出標准的定義,在線性回歸中,我們要解決的是一個最小化問題

我們選擇的參數 θ0 和 θ1 決定了我們得到的直線相對於我們的訓練集的准確程度,模型所預測的值與訓練集中實際值之間的差距(下圖中藍線所指)就是建模誤差(modeling error)。

image

我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型參數。即使得代價函數:

image

最小。我們繪制一個等高線圖,三個坐標分別為 θ0 和 θ1 和J(θ0 1):

image

image

可以看出在三維空間中存在一個使得J(θ0,θ1)最小的點。

3. 梯度下降(Gradient Descent)

我們已經定義了代價函數,現在我們來介紹梯度下降算法,該算法可以將代價函數 J 最小化。梯度下降是很常用的算法,它不僅被用在線性回歸上,並且被廣泛的應用於機器學習的眾多領域中,之后為了解決其他線性回歸問題,我們也將使用梯度下降法來最小化其他函數。

在這里,我們有一個函數 J(θ0 1) ,也許這是一個線性回歸的代價函數,也許是一些其他函數,要使其最小化,我們需要用一個算法來最小化函數    J(θ0 1),事實證明,梯度下降算法可應用於多種多樣的函數求解,所以想象一下如果你有一個函數J(θ0, θ1, θ2, ...,θn ),你希望可以通過最小化 θ0 到 θn 來最小化此代價函數J(θ0 到θn),用n個θ是為了證明梯度下降算法可以解決更一般的問題。但為了簡潔起見,為了簡化符號,在接下來的討論中,我們只用兩個參數。

image

下面就是關於梯度下降的構想。首先我們要做的是對 θ0  和 θ1 進行初始化。實際上,它們到底是什么其實並不重要,但通常的選擇是將 θ0 設為0
,同時也將 θ1 也設為0,即將它們都初始化為0。

我們在梯度下降算法中要做的就是不停地一點點地改變 θ0 和 θ1 ,試圖通過這種改變使得 J(θ0 1) 變小,直到我們找到 J(θ0 1) 的最小值。或許是局部最小值。

讓我們通過一些圖片來看看梯度下降法是如何工作的,我們在試圖讓 J(θ0 1)  最小,注意坐標軸 θ0 和 θ1 在水平軸上,而函數 J(θ0 1) 在垂直坐標軸上,圖形表面高度即是 J(θ0 1) 的值。我們希望最小化這個函數,因此我們從 θ0 和 θ1 的某個值出發。所以想象一下,對 θ0 和 θ1 賦以某個初值,也就是對應於從這個函數表面上的某個起始點出發,因此不管 θ0 和 θ1 的取值是多少,我將它們初始化為0。但有時你也可把它初始化為其他值。

image

image

現在我希望大家把這個圖像想象為一座山。想像類似這樣的景色,公園中有兩座山,想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上。在梯度下降算法中,我們要做的就是旋轉360度,看看我們的周圍,並問自己,如果我想要下山,如果我想盡快走下山,我們需要朝什么方向?

如果我們站在山坡上的某一點,你看一下周圍 ​,你會發現最佳的下山方向大約是那個方向。好的,現在你在山上的新起點上,你再看看周圍,然后再一次想想我應該從什么方向邁着小碎步下山? 然后你按照自己的判斷又邁出一步,往那個方向走了一步。然后重復上面的步驟,從這個新的點,你環顧四周並決定從什么方向將會最快下山,然后又邁進了一小步,又是一小步…並依此類推,直到你接近局部最低點的位置。

此外這種下降有一個有趣的特點,不同的起始點開始進行梯度下降算法,你會得到一個非常不同的局部最優解,這就是梯度下降算法的一個特點。

下圖是梯度下降算法的定義:

image
注意,在梯度下降算法中,我們需要同時更新 θ0 和 θ1。

image

如果學習速率太小,只能這樣像小寶寶一樣一點點地挪動,去努力接近最低點,這樣就需要很多步才能到達最低點。

如果學習速率太大,那么梯度下降法可能會越過最低點,甚至可能無法收斂。實際上,會離最低點越來越遠,因此,如果α太大,會導致無法收斂,甚至發散。

image

如果你的參數已經處於局部最低點,那么梯度下降法更新其實什么都沒做(求導為0),它不會改變參數的值,這也正是你想要的,因為它使你的解始終保持在局部最優點,這也解釋了為什么即使學習速率 α 保持不變時,梯度下降也可以收斂到局部最低點

image

梯度下降一步后,新的導數會變小一點點。隨着梯度下降法的運行,你移動的幅度會自動變得越來越小,直到最終移動幅度非常小,你會發現已經收斂到局部極小值。

在梯度下降法中,當我們接近局部最低點時,梯度下降法會自動采取更小的幅度。這是因為當我們接近局部最低點時(很顯然在局部最低時導數等於零 ),導數值會自動變得越來越小,所以梯度下降將自動采取較小的幅度,這就是梯度下降的做法,所以實際上沒有必要再另外減小α。

image

image
image

實際上,用於線性回歸的代價函數總是呈現一個弓形的樣子,這個函數的專業術語是凸函數。這個函數沒有任何局部最優解,只有一個全局最優解。

image

實際上,我們剛剛介紹的梯度下降,是“批量梯度下降”,指的是,在梯度下降的每一步中我們都用到了所有的訓​​練樣本。在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以在每一個單獨的梯度下降中,我們最終都要計算這樣一項,這項需要對所有m個訓練樣本求和。

而事實上,也有其他類型的梯度下降法不是這種"批量"型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM