1. 程式人生 > >統計學知識6:邏輯迴歸的極大似然求解(梯度下降實現)

統計學知識6:邏輯迴歸的極大似然求解(梯度下降實現)

邏輯迴歸的極大似然推導:

由於似然函式是樣本的函式,需要知道其分佈,並且假設相互獨立。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1

上述公式就推匯出梯度下降更新的方向

0?wx_fmt=png

梯度更新的方法:

0?wx_fmt=png

邏輯迴歸程式設計實現(按步驟手工程式設計

假設我們有一個數據,共有100個樣本,含兩個x變數,x1、x2,一個目標變數y。資料如下:

0?wx_fmt=png

我們的目標是求出引數θ0、θ1、θ2。

步驟1:定義sigmoid函式

0?wx_fmt=png

0?wx_fmt=png

logistic轉化成預測概率。

步驟2:定義線性迴歸函式z的表示式

0?wx_fmt=png

0?wx_fmt=png

步驟3:定義初始值θ

0?wx_fmt=png

步驟4:根據對數似然函式,寫出J(θ),並寫出損失函式

0?wx_fmt=png

0?wx_fmt=png

θ初始值為0時,此時的損失函式的值為ln(0.5)

0?wx_fmt=png

步驟5:計算每個引數的梯度下降方向

0?wx_fmt=png

0?wx_fmt=png

步驟6:定義樣本資料的重新整理重排

每次迭代後需要重新重新整理資料:


0?wx_fmt=png

步驟7:梯度下降演算法模組

1)設定不同的迭代停止策略,共有三種策略:根據迭代次數、根據兩次迭代目標值的變化、根據梯度值。

0?wx_fmt=png

2)定義梯度下降公式。

0?wx_fmt=png

3)定義梯度下降的方法

0?wx_fmt=png

梯度下降有三種方法:

  • 批量梯度下降法:在更新引數時使用所有樣本來進行更新.

  • 隨機梯度下降法:批量梯度下降法原理類似,區別在與求梯度時沒有用所有的n個樣本的資料,而是僅僅選取1個樣本來求梯度。和批量梯度下降法是兩個極端值

  • 小批量梯度下降法:是批量梯度下降法和隨機梯度下降法的折中,也就是對於n個樣本,我們採用m個樣子來迭代,1<m<n。一般可以取m=10,當然根據樣本的資料,可以調整這個m的值。

步驟8:梯度下降演算法實施案例。可嘗試不同的方法和策略

1、對比不同的停止策略,採用批量梯度下降法

1)策略1:採用限制迭代次數停止法。迭代策略設定為5000次。最後損失值為0.63

0?wx_fmt=png

2)策略2:採用目標值變化的限制,兩次目標值的變動小於0.000001時則停止。大約迭代了109901次,最後的損失值為0.38.

0?wx_fmt=png

3)停止策略3:採用梯度值的方法限制,梯度值的限制為0.05。大約迭代了140045次,最後的損失值為0.49.

0?wx_fmt=png

也可以看出迭代次數越多效果越好。

2、對比不同梯度下降法

1)採用隨機梯度下降法:取1個樣本來求梯度

0?wx_fmt=png

可以看出模型不穩定。嘗試調小學習率,增加迭代次數

0?wx_fmt=png

2)採用小批量梯度下降法:取10個樣本來求梯度

0?wx_fmt=png

結果仍然不太穩定。

 3、資料標準化之後的處理

    嘗試下對資料進行標準化 將資料按其屬性(按列進行)減去其均值,然後除以其方差。最後得到的結果是,對每個屬性/每列來說所有資料都聚集在0附近,方差值為1。

0?wx_fmt=png

1)批量梯度下降法,迭代5000次,求解目標值為0.38.資料預處理非常重要,可以提高迭代效率。

0?wx_fmt=png

2)批量梯度下降法,迭代次數增加,可以使損失函式降的更多

0?wx_fmt=png

更多的迭代次數會使得損失下降的更多。

3)小批量梯度下降法,增加迭代次數,下降效果更好

0?wx_fmt=png

步驟10:定義精確度,並求解優化前及優化後的精度對比。

0?wx_fmt=png

計算精度

當theta=array([[ 0.,  0.,  0.]])時,計算精度為:

0?wx_fmt=png

當theta為梯度優化後的值時,求出的精度為89%

Theta: [[ 1.49844241  3.5261332   3.27347064]]

0?wx_fmt=png