《機器學習實戰》-- 邏輯斯蒂迴歸

引言

  迴歸我們知道有線性迴歸,線性迴歸模型能夠無限的逼近我們的結果。以(xi,yi) 爲例,通過線性迴歸 f(x)=wTx+b 表達式,就可以得到我們對yi 的估計值。

迴歸到分類

  如何從線性迴歸轉換到分類呢?由於線性迴歸得到的是連續值,z=wTx+bz 的範圍[,] ,是這樣的一個連續值無法直接轉換爲類別。那怎麼辦?最簡單粗暴的方法,在二分類中,我們設定一個閾值0,當z的值大於0我們就把他歸類爲1,小於0歸類爲0,z=0時就歸類爲0,那不就是得到如下表達式了嗎?

p=0z<00.5z=01z>0

如果我能畫個圖就好了,你看這個表達式像什麼,是不是有點像符號函數(單位階躍函數)。符號函數有一個特點,那就是啥?不可導。不可導會導致什麼後果。比如說,預先設置w=w1,w2,...wn 的初始值都爲1 ,給定一個樣例(xi,yi) ,當然此時的x 爲一個向量。所以通過z=wTx+b 得到z 值,然後根據符號函數得到p,發現預測的類別和我們的yi 不一致,我們是不是要回去更新w 值,怎麼更新,用梯度啊,求導啊。可是不可導啊,那可咋整。所以我們不能用線性迴歸去做分類,因此我們需要找一個函數來把剛纔計算的z 轉換一下,於是對數機率函數就出現了。
y=11+ez
它就可以把剛纔的線性函數轉換爲非線性的,而且是處處可導的。範圍在0-1。將剛纔的線性函數帶入對數機率函數中得到
y=11+e(wTx+b)
。這個函數就把[,] 映射到了[0,1] 實際上我們的y值代表的就是類別爲1的概率,那麼1y 就是類別爲0的概率。好吧,那我們就以概率的形式來把他們表示出來:
P(y=1|w,b,x)=11+e(wTx+b)

P(y=1|w,b,x)=hw(x)

P(y=0|w,b,x)=e(wTx+b)1+e(wTx+b)

P(y=0|w,x,b)=1hw(x)

我們可以把第二和第四個公式合併成一個,
J(hw(x),y)=hw(x)y(1hw(x))(1y)
如果y=11y=0 就剩第一項了,我們就得到了類別爲1的概率。如果y=0 ,就只剩第二項了,也就是類別爲0的概率。將其取對數之後,得到
J(hw(x),y)=ylnhw(x)+(1y)ln(1hw(x))
這樣給定一個樣本,我們就可以得出該樣本屬於一個類別的概率,而這個概率越大越好,也就是我們希望上面的代價函數能夠取到最大值。
  當然上面是這對一個樣本的代價函數,我們要通過多個樣本來估計參數w 需要用到什麼知識。當然是極大似然函數了,如果不明白可以參考我的前一篇博客。假設樣本之間是相互獨立的,所以要先將所有樣本的代價函數乘起來,然後取對數將乘轉換爲加。即:
J(w)=i=1n[yilnhw(xi)+(1)+(1yi)ln(1hw(xi))]
n爲樣本個數,我們的目的就是求一組w ,它能讓上面這個代價函數取到最大值那就得用梯度上升算法,夷,一般不都是取最小值嗎?我們在J(w) 前面加一個負號就是取最小值了,就可以用梯度下降算法了。本質上是一樣的,只是一個負號的問題。

梯度下降算法

  梯度下降算法的目的就是不斷的更新w的值,使J(w) 取到最小。梯度下降算法的表達式就是:

wi=wiJ(wi)wi

所以我們需要對J(w) 求導數,求導前,我們先捋一捋:
hw=g(wTx)=11+e(wTx)
這就用到鏈式求導法則了:
J(w)wi=J(w)g(wTx)g(wTx)wTxwTxwi
那這三項需要我們一個一個的來求
第一項的求導結果爲:
J(w)g(wTx)=y1g(wTx)+(y1)11g(wTx)

第二項的求導結果爲:
g(wTx)wTx=e(wTx)(1+e(wTx))=1(1+e(wTx))(111+e(wTx))=g(wTx)(1g(wTx))

第三項的求導結果爲:
wTxwi=J(w1x1+w2x2+..+wnxn)wi=xi

所以,三項求導都完成了,我們可以得到最終的求導結果爲:
J(w)wi=wiαxi[yig(wTx)]

OK,按照這個公式更新參數我們就可以完成得到最終的w 了。
  終於寫完了,累死我了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章