在學習網易公開課中斯坦福機器學習公開課的講義和視訊過程中自己的認識和體會。
以房屋面積與房屋價格來舉例子:
我們如何根據這樣的資料,來預測出其他房屋價格?
為了預測其它房屋價格,我們需要建立一個函數,一種特征(輸入)和目标變量(輸出)的映射關系(h),我們假設這個映射關系是y=h(x),我們需要根據表中的資料(稱之為訓練資料集),來找到這個能表示他們之間映射關系的函數(h函數又成為假設函數)。算法大緻過程如下:
監督學習算法過程:
Training Set:訓練資料集,訓練樣本。
Learning algorithm: 學習算法。
h: h(ypothesis) 函數
X:函數的輸入,在課程中,表示房屋的居住面積
y:根據輸入和h函數預測而來的房屋價值
首先,我們有一些原始的資料集(稱作訓練樣本),一些作為特征輸入,一些作為輸出,根據這些訓練樣本和標明的學習算法來算出假設函數(h函數),訓練完成後,可以根據這個假設函數來預測輸出(房屋的價值), 通俗的來講就像知道輸入和輸出,根據算法來找出他們之間的對應,以便來發現規律,為後面隻有輸入時,再根據這樣的規律來預測輸出。當我們需要去預測是目标變量是連續的,比如根據住房面積來預測房價,這類問題可以叫做回歸問題。當需要預測的目标變量是離散的(就像根據居住的面積來判斷這個住所是較高價的電梯大廈還是房屋),這類問題可以叫做分類問題。
第一部分 線性回歸
在前面講到,房價與房屋面積的關系例子中,我們隻選取了一個特征(房屋面積),現在再多加入一個特征值,卧室的個數,那麼前面的資料表,就會變成如下形式:
我們把房價與特征之間的關系假設成線性關系:
θ表示參數,x表示各項特征(表中的資料項,x1表示卧室個數,x2表示房屋面積)。
那麼如何來根據我們的資料求出假設中各個參數(也叫權重)的值?一種比較直覺的想法是,讓h函數值逼近資料中的房屋價值(y)。是以我們定義一個損失函數J(θ):
這個函數就是最小二乘法,現在的問題就是通過優化使得損失函數達到最小。 現在要做的就是找到參數θ,使得損失函數J達到最小值,為了達到這個目的,我們會随機選取一個初始值,然後通過算法對這個初始值進行優化,來使損失函數達到最小。我們用梯度下降法,先利用選取的參數θ的初始值,再用下面的算法對參數持續更新:
其中α 叫做學習率,這個值,決定了每次在調整參數θ時的跨度,如果選取較大,可以會在函數的極值點附近來回擺動,如果選取較小,函數的收斂速度會很慢,影響算法的效率。 對上述公式中求偏導部分進一步展開和化簡:
那麼公式就會變化成下面部分:
(1)
這個公式就是最小二乘法,根據這個公式可以看得到我們對參數做出的調整也就是預測和實際資料之差。上面這個公式隻是針對資料集中一個樣本的公式,但對于所有樣本都進行計算,我們有兩種方法:其中一種是用下面的公式做替換:
(2)
對比公式(1),我們會發現公式(2)把資料集中所有樣本的誤差都加了起來,公式(1)就是簡單的梯度下降方法,而公式(2)被稱為批梯度下降(batch gradient descent),這裡需要注意,梯度下降法容易受到局部的極小值的影響,但是本例中,隻有一個全局的最小值,沒有局部的極小值,是以我們在使用這個算法時,梯度下降總是收斂的。根據這個算法,就可以找到各個參數的極小值,求出我們的模型h(θ)。 與公式(2)的批梯度下降算法類似的,還有一種算法:
在這個算法中,每一次疊代我們隻用資料集中的一個樣本(而不是像公式(2)中把所有樣本的在一次疊代中使用),根據這一個樣本的誤差來更新參數的值,這個方法我們叫做增量梯度下降法。 批梯度下降法在對一個參數做一次調整時,都會浏覽資料集中的每一個樣本(如果樣本數很多的時候,這就是一個不小的開銷),而增量梯度下降法,讀一個樣本就可以針對參數做出調整。通常情況下,增量梯度下降法能更快使得參數逼近最小值,(這裡需要注意,最後的結果不一定真的是最小值,θ可能會讓J(θ)在最小值左右不停的震蕩,但是根據實際的效果來看大多數接近最小值的θ,已經使函數值逼近我們可接受範圍内的最小值了)。 是以在訓練資料集很大的情況下,增量梯度下降法比批梯度下降法更适用。