邏輯迴歸算法之梯度算法

 

在學習Logistic邏輯迴歸算法(上一節介紹)編程時,被其中一句python語句卡住了,該語句就是:

weights = weights + alpha * dataMatrix.transpose() * error

讓我們來順一下。

首先,是二分類算法,類別爲1或0,利用sigmoid函數很合適

令:

整合得:

當sigmoid>0.5時,分類爲1,sigmoid<0.5時,分類爲0。其函數值在(0,1)之間,又恰和概率巧妙聯繫上,

解釋:函數的值爲(0, 1),當h>0.5時,y=1,該值也可以爲y=1的概率,概率大於0.5當然比較大,基本可以確定成立(即y=1);概率小於0.5時,概率比較小y=1不成立,當然h<0.5本來就是類別y=0,正好概率1-h,爲類別爲0的概率。

上面兩個式子合併即損失函數:

解釋:當類別爲1時,即y=1,Loss=h,當類別爲0時,即y=0,Loss=1-h。

梯度上升(下降)法,就是爲了使得損失函數最大或最小,從而找到最優參數。

最大還是最小呢?例如h=0.55和h=0.99,都有y=1。既然是概率,當然越大越好,所有這裏要求Loss的最大值。

很多提到了最大對數似然函數。

似然函數定義:給定輸出x時,關於參數W的似然函數L(W|x)(在數值上)等於給定參數W後變量X的概率:

似然函數用於在已知某些觀測所得到的的結果時,對有關事物的性質的參數進行估計。與概率相反,概率用於在已知一些參數的情況下,預測接下來的觀測所得到的結果。

似然函數就是求參數的。

似然函數的重要性不是它的具體取值,而是當參數變化時函數到底變小還是變大。對同一個似然函數,如果存在一個參數值,使得它的函數值達到最大的話,那麼這個值就是最合理的參數值。

最大似然函數就是求似然函數的最大值,使得參數最合理。

所以一般將最大似然函數作爲梯度上升算法的損失函數。

上面的Loss損失函數也正是最大似然函數(使概率最大)。只不過損失函數的變量是W,W是未知的需要求解的。

現在轉爲求Loss最大的最優解W。

梯度上升法可以求最大值。初始化一個點,求各W各方向的偏導數,即梯度。沿着梯度上升方向走(步長a),到達另一個點,繼續沿梯度上升方向(重新計算)走,一直循環……

由於需要求未知參數的偏導數,而對數函數第單調遞增的,而且對數函數在極大化求解時較爲方便,所以一般取似然函數的對數作爲求最大值的函數,這樣求出的最大值和直接求最大值得到的結果是相同的。

所以對Loss函數求對數,得:

現在好了,目標是對Loss求最大,先求梯度:

求解過程:

所以梯度向量爲:

所以迭代爲:

即weights = weights + alpha * dataMatrix.transpose() * error

dataMatrix.transpose()即爲X,error即爲

以上爲粗略的解釋,如有不對請指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章