我們通過一個預測房價的例子,來給出解決迴歸問題的一種常用算法函數:平方誤差代價函數。(迴歸問題屬於監督學習)
預測房價的例子如下:
已有大量的已知數據(房子大小,房價),將房子大小作爲x軸數據,對應的房價作爲y軸數據,根據這些數據,來推測出某一房子大小所對應的房價可能是多少?
部分數據示例:
Size of feet^2(x) | Prices in 1000's(y) |
500 | 112 |
523 | 78 |
545 | 185 |
566 | 167 |
... | ... |
Notation:
m:number of training examples(訓練樣本的數量)
x's: "input" variables
y's: "output" variables
(x,y): one training example(一個訓練樣本)
: i^th training example(第i個訓練樣本,如第一個訓練樣本:=500, =112)
1. 如何通過已給出的大量數據來推測出某房子大小對應的房價?
通過已給出的訓練集(即大量已知數據),加上一個學習算法,從而(?)給出一個假設函數h,而房子大小x作爲輸入數據,通過假設函數給出輸出結果y(房價預測值)。
2. 如何給出假設函數h?
根據本次例子的房價預測,我們可以把假設函數定成一個簡單的線性函數。那麼可以給出函數公式:
、:模型參數
而隨着參數的不同,函數h的預測曲線與訓練集的擬合程度不同。目標是儘可能使函數曲線更貼合真實數據,即使得的值儘可能小。
因此,爲了更準確的表達假設函數與真實數據的差距,我們用函數來表示其誤差,函數稱爲代價函數(也稱爲平方誤差函數或平方誤差代價函數)。
其中是函數值與真實數據值的平方誤差和。
注意:也有其他的代價函數,但平方誤差代價函數可能是解決迴歸問題最常用的手段。
那麼接下來的目的就是求出最貼合真實數據的預測曲線,即求出最合適的參數和,而通過求得代價函數的值,可以得到合適的數和使值最小。
3. 如何分析代價函數J?
首先梳理下我們所用到的函數:
假設函數:
參數:
,
代價函數:
目標:求出最小值,從而得到對應的和參數值。
可知隨着參數值的不同,代價函數會取不同值。爲了方便觀察,我們首先將假設函數簡化爲只含一個參數:
並給出一個簡單的訓練集:包含已知數據(1,1),(2,2),(3,3),如圖:
我們將取不同值,可以得出不同的代價函數值:
=1,=0;=0.5,=0.58;=0,=2.3 等等..
根據值與對應的代價函數值,我們可以畫出兩者之間的關係曲線:
橫座標爲參數,縱座標爲代價函數值
從圖中可以得到,當=1時,代價函數爲最小值=0,此時假設函數的曲線完全貼合訓練集的數據。
那麼當假設函數有兩個參數和時,我們可以得到代價函數的曲線圖及相應的等高線如下圖所示:
那麼現在已知只要找到代價函數的最低點(最小值),就能得到相應的參數值,從而找到最適合的假設函數。
4. 如何實現找到代價函數最小值?
這裏要使用梯度下降算法(Gradient descent algorithm)。
梯度下降算法:以某點爲起始,選擇下一步要走的點,使得下一步爲當前點可最快到達最低處的點,不停地循環此步驟,直到到達局部最小值。
用梯度下降算法最小化任何函數:
已知:代價函數
目標:(求得代價函數最小值)
要做:(1)從某一值開始;
(2)不停地改變值,來使變小,直到找到的最小值(或局部最小值)
注意:之所以說是局部最小值而非全局最小值,是因爲代價函數的曲線圖有可能有多個局部最低點,在這種情況下,設定不同的初始theta值,有可能會到達不同的局部最低點。
梯度下降算法的具體實現:
Gradient descent algorithm:
repeat until cenvergence{
}
(1)表示所有的參數,在本例中參數有兩個、,更新參數值時要同時更新和的值,同時更新的意思是兩個賦值語句中間不能有任何其他的會改變參數值的賦值語句。
(2)表示learning rate(學習率),表示每次更新參數值時所更新值的幅度的大小。若過小,則從初始參數值到代價函數局部最低點所屬的參數值要經過非常多次更新;而如果過大,則會有可能使參數值在更新時直接跨過局部最低點,導致算法無法收斂甚至發散。
將代價函數代入中, 可以得到:
根據對兩個參數theta0、theta1分別求J的偏導,我們可以得到:
因此,將梯度下降算法具體到本次例子中,算法可以寫成:
Gradient descent algorithm:
repeat until cenvergence{
}
在本例子中,因爲線型迴歸的代價函數總是一個弓狀函數(術語叫凸函數,即只有一個最低點),因此不存在局部最優解,只有一個全局最優。
ps:在繪製代價函數圖時,發現這個凸函數並沒有像課程視頻中一樣是個很標準的弓狀函數,目前推測原因是因爲選取的假設函數過於簡單,只含有一個特徵x,因此對於數據集來說可以有一系列對應的和來符合數據,所以和的取值較爲寬泛,也就形成不了一個最優解。(僅推測)