這裡寫的是最小二乘的線性回歸方法,用梯度下降來調整引數。
首先我們看一些符號:
m: 樣本數量
n: 引數個數
xi: 第i個樣本的特徵(feature)向量
xji: 第i個樣本的第j個特徵
y: 樣本真實值,是乙個向量
θ: 引數向量(或者你直接理解成陣列可能比較好理解,程式中以alpha命名)
α: 步長(學習率,程式中以alpha命名)
hθ(xi): 回歸函式,計算當前引數為θ的情況下,第i個樣例的估計值
其中任何乙個樣本的x0 都為1
代價模型(這裡採用最小二乘法):
梯度下降調整引數:
思想:將j(θ)對於所有的θi求偏導數,讓對應的θi沿著切線方向靠近j(θ)的區域性最小值。(因此,如果你改變了代價模型,只需要對應改變這裡的更新函式即可)
其中α是步長,或者稱為學習率
注意這裡的所有θ要同時更新,假如有θ0和θ1,如果更新了θ0再用上面的公式來更新θ1,前面的θ0的改變會造成hθ (xi)的值發生改變。
前面都是些基本知識,程式設計實現也不難,但是有些同學反映迭代速度很慢,可能是由於演算法沒有優化吧。
可能這些同學是直接按照公式去用迴圈求解的,那樣就會造成,對於每個θi的更新,你都需要去計算一次每乙個樣例的估計值hθ (xi)的值,但是其實在這一輪更新裡面,更新結束前,這個估計值是不會改變的,也不能改變,所以我們可以用乙個陣列來儲存這些估計值,而在更新θi的時候直接去陣列裡面獲取對應的估計值就好了。
比如陣列為:
double *hvalue =new double[n];
這裡的n是你的樣例個數。
那麼,上面的更新θi的公式就變成了:
這樣子程式應該就會變快不少了。
關於梯度下降
關於何為梯度下降 批量梯度下降 bgd 用所有資料計算梯度 隨機梯度下降 sgd 用單個資料計算梯度 小批量梯度下降 mbgd 用小部分資料計算梯度 動量梯度下降 momentum 通過結合之前的梯度動量來計算當前的梯度動量,其計算公式的實質為為前n個梯度向量的平均。常用公式如圖,其中 指代平均前1...
關於梯度下降
什麼是梯度下降 簡單地來說,多元函式的導數 derivative 就是梯度 gradient 分別對每個變數進行微分,然後用逗號分割開,梯度是用括號包括起來,說明梯度其實乙個向量,我們說損失函式l的梯度為 我們知道導數就是變化率。梯度是向量,和引數維度一樣。總結梯度下降這一目前機器學習 深度學習解決...
隨機梯度下降與梯度下降的區別?
如果你還不了解梯度下降請參考 知乎 ai醬 梯度下降是個啥?假設你已經懂了梯度下降的原理與公式。接下來我會舉個例子來講隨機梯度下降與梯度下降的區別。假如損失 誤差 函式對引數w的導數是x w x la bel x wx label x wx l abel 然後我們需要更新的引數是w ww,學習率是 ...