假如我們有一個數據集:
其中,i是從1到m。數據集總共有m組。
前兩個是自變量,最後一個是因變量。我們可以這樣理解,存在某種關係,使得y會隨着x1和x2的變化而變化。這種理解跟函數是不是很像?實際上,我們確實可以假設存在這樣一個函數,它跟數據集很擬合。所以即使數據集裏沒有的它也可以預測出結果。現在假設有一個線性的函數可以擬合:
我們希望能得到一組
最直接的想法就是利用h(x)與y之間的差異來衡量,即定義一個代價(cost)函數:
而我們的目標就是,想辦法在這個已知的數據集下,得到一組
這樣我們就可以找出最低點了。
梯度下降算法
在計算機的計算中,我們如何才能找到
1 先隨便給
2 改變
僞代碼如下:
while()
{
temp0=
temp1=
}
由於每一次的
梯度下降算法的細節改進
特徵縮放(Feature Scaling)
比如有數據集
其中有兩個變量,x1和x2,假如x1的變化範圍大概是0~2000,而x2的變換範圍大概是1~5。顯然x1和x2的取值範圍差距很大,在畫代價(cost)函數的時候圖像會很奇怪,利用梯度下降算法找最小值的時候,下降的速度就會很慢,而且容易振盪。爲了解決這個問題,可以使用歸一化。即:
學習速率α的選擇
α太小,收斂速度就會變慢,太大又有可能不會收斂。只能慢慢嘗試了。