梯度是函式在某點處的乙個方向,並且沿著該方向變化最快,變化率最大。
沿著梯度這個方向,使得值變大的方向是梯度上公升的方向,沿著使值變小的方向便是下降的方向。
綜上,梯度下降的方向就是在該點處使值變小最快的方向。
在上個推送中我們得出了最小二乘項的代價函式(不好理解的話,可以理解為極大似然估計時,某個部分必須取得極小值,它被稱為代價函式):
其中,m 代表樣本個數,y(i) 表示第 i 個樣本的標籤值(就是我們高中數學的因變數),theta的轉置表示各個特徵的權重引數的矩陣,x(i)表示各個特徵的取值(就是自變數)。
上個推送中,我們知道可以用數學方法直接求出代價函式的極小值,進而求出權重引數為,
上式中的引數 theta 別以為只有乙個值,它實際上是特徵的權重引數向量,如果有5個特徵,它就對應著5個元素,如果它有100個特徵,對應著100個元素。
在用梯度求解時的代價函式與直接求法有一點小區別,代價函式要除以樣本個數,言外之意,我們的代價函式不會因為樣本個數太多,而變得越大吧,應該不受樣本個數的影響吧,因此,微調後的代價函式為:
如何用上節介紹的梯度下降來求權重引數的向量呢?
還是從概念入手,首先得求出梯度來吧,說白了就是求出代價函式的偏導數。為什麼是偏導數呢?因為就像上面說的,如果有100個特徵,那可是對應著100個權重引數的,自然要對每個theta求導數,也就是含有多個自變數的函式求導數,不就是叫做求偏導嗎。
下面直接對代價函式求偏導,具體推導過程見【機器學習儲備(4):最常用的求導公式推送訊息】,結果為:
其中 表示第 j 個特徵的權重引數,表示第 i 個樣本的第 j 個特徵的權重引數。
每次調整一點點,不能一次調整太多,調整的係數,我們稱為學習率,因此每次引數的調整迭代公式可以寫為如下所示:
其中表示第 t+1 個迭代時步的第 j 個特徵的權重引數,為第 t 個迭代時步的第 j 個特徵的權重引數。
上式的減去,是因為梯度下降,沿著求出來的導數的反方向。
注意觀察上式,權重引數的迭代公式,如果我們參與計算的所有樣本為 m 個,如果樣本個數為10萬個,共有10個特徵,共需要迭代1萬步,你想想這個計算量得多大呀?
10萬 * 10 * 1萬 = 1 e 10,這個計算量不小呀。
因此,在實際的應用中,往往選取10萬個樣本中的一小批來參與本時步的迭代計算,比如每次隨機選取20個樣本點,再乘以乙個學習率,即下面的公式:
這樣的計算量就小很多了吧,因此在機器學習中,每個時步要想讓所有的樣本都參與計算,往往是不可取的,相對應的,是隨機選取一小批資料來參與當前時步的迭代計算,才是上策。
好了,到這裡,已經把最小二乘項的兩種求解方法:直接法和梯度下降法都闡述了一遍。直接法只是一種求解權重引數的巧合,現實中往往更複雜的模型是不大可能直接求出權重引數的,更可能是通過梯度下降做法求權重引數吧。這兩種方法都相同的是建立模型得到目標函式,求解樣本的似然函式,然後極大對數似然估計求引數,最後都得到了乙個代價函式吧。
明天就該實戰了!手動編寫python**分別實現以上兩種方法來實現線性回歸吧。資料集還是經典的房屋面積價值dataset 。
當然,ols演算法在sklearn庫中已經有了對應的實現,但是這並不妨礙我們手動編寫**,因為我們是為了從思想層面認識機器學習最基本也非常重要的最小二乘法吧,這也是入門機器學習的相對較好的方法吧。
謝謝您的閱讀,期待您的到來!
最小二乘法 梯度下降演算法
普通最小二乘法 ordinary least square,ols 最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小。設擬合曲線 y a x b 離散點在擬合曲線附近 且任一點 i 距擬合曲線的距離 誤差 為 ui yi y 最小二乘即可寫成 d ui 2 且是d取最小值 具有最小值。那...
梯度下降法,最小二乘法求線性回歸
來自知乎內容 最小二乘法和梯度下降法有哪些區別?非線性最小二乘法 非線性最小二乘的求解樣例 longshaoan 問題 已知資料x y,x 0.46,0.0755,0.0227,0.63,0.435,0.4 y 0.595,0.556,0.44,0.53,0.634,0.551 依照y b a x ...
最小二乘法和梯度下降法
通過這段描述可以看出來,最小二乘法也是一種優化方法,求得目標函式的最優值。並且也可以用於曲線擬合,來解決回歸問題。難怪 統計學習方法 中提到,回歸學習最常用的損失函式是平方損失函式,在此情況下,回歸問題可以著名的最小二乘法來解決。看來最小二乘法果然是機器學習領域做有名和有效的演算法之一。二.最小二乘...