在學習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即爲
以上爲粗略的解釋,如有不對請指出。