引言
迴歸我們知道有線性迴歸,線性迴歸模型能夠無限的逼近我們的結果。以(xi,yi) 爲例,通過線性迴歸 f(x)=wTx+b 表達式,就可以得到我們對yi 的估計值。
迴歸到分類
如何從線性迴歸轉換到分類呢?由於線性迴歸得到的是連續值,z=wTx+b ,z 的範圍[−∞,∞] ,是這樣的一個連續值無法直接轉換爲類別。那怎麼辦?最簡單粗暴的方法,在二分類中,我們設定一個閾值0,當z的值大於0我們就把他歸類爲1,小於0歸類爲0,z=0時就歸類爲0,那不就是得到如下表達式了嗎?
p=⎧⎩⎨⎪⎪0z<00.5z=01z>0
如果我能畫個圖就好了,你看這個表達式像什麼,是不是有點像符號函數(單位階躍函數)。符號函數有一個特點,那就是啥?不可導。不可導會導致什麼後果。比如說,預先設置
w=w1,w2,...wn 的初始值都爲
1 ,給定一個樣例
(xi,yi) ,當然此時的
x 爲一個向量。所以通過
z=wT∗x+b 得到
z 值,然後根據符號函數得到p,發現預測的類別和我們的
yi 不一致,我們是不是要回去更新
w 值,怎麼更新,用梯度啊,求導啊。可是不可導啊,那可咋整。所以我們不能用線性迴歸去做分類,因此我們需要找一個函數來把剛纔計算的
z 轉換一下,於是對數機率函數就出現了。
y=11+e−z
它就可以把剛纔的線性函數轉換爲非線性的,而且是處處可導的。範圍在0-1。將剛纔的線性函數帶入對數機率函數中得到
y=11+e−(wT∗x+b)
。這個函數就把
[−∞,∞] 映射到了
[0,1] 實際上我們的y值代表的就是類別爲1的概率,那麼
1−y 就是類別爲0的概率。好吧,那我們就以概率的形式來把他們表示出來:
P(y=1|w,b,x)=11+e−(wT∗x+b)
P(y=1|w,b,x)=hw(x)
P(y=0|w,b,x)=e−(wT∗x+b)1+e−(wT∗x+b)
P(y=0|w,x,b)=1−hw(x)
我們可以把第二和第四個公式合併成一個,
J(hw(x),y)=hw(x)y(1−hw(x))(1−y)
如果
y=1 ,
1−y=0 就剩第一項了,我們就得到了類別爲1的概率。如果
y=0 ,就只剩第二項了,也就是類別爲0的概率。將其取對數之後,得到
J(hw(x),y)=ylnhw(x)+(1−y)ln(1−hw(x))
這樣給定一個樣本,我們就可以得出該樣本屬於一個類別的概率,而這個概率越大越好,也就是我們希望上面的代價函數能夠取到最大值。
當然上面是這對一個樣本的代價函數,我們要通過多個樣本來估計參數
w 需要用到什麼知識。當然是極大似然函數了,如果不明白可以參考我的
前一篇博客。假設樣本之間是相互獨立的,所以要先將所有樣本的代價函數乘起來,然後取對數將乘轉換爲加。即:
J(w)=∑i=1n[yilnhw(xi)+(1)+(1−yi)ln(1−hw(xi))]
n爲樣本個數,我們的目的就是求一組
w ,它能讓上面這個代價函數取到最大值那就得用梯度上升算法,夷,一般不都是取最小值嗎?我們在
J(w) 前面加一個負號就是取最小值了,就可以用梯度下降算法了。本質上是一樣的,只是一個負號的問題。
梯度下降算法
梯度下降算法的目的就是不斷的更新w的值,使−J(w) 取到最小。梯度下降算法的表達式就是:
wi=wi−∂J(wi)∂wi
所以我們需要對
J(w) 求導數,求導前,我們先捋一捋:
hw=g(wT∗x)=11+e−(wT∗x)
這就用到鏈式求導法則了:
∂J(w)∂wi=∂J(w)∂g(wT∗x)∗∂g(wT∗x)∂wT∗x∗∂wT∗xwi
那這三項需要我們一個一個的來求
第一項的求導結果爲:
∂J(w)∂g(wT∗x)=y∗1g(wT∗x)+(y−1)11−g(wT∗x)
第二項的求導結果爲:
∂g(wT∗x)wT∗x=e−(wT∗x)(1+e−(wT∗x))=1(1+e−(wT∗x))∗(1−11+e−(wT∗x))=g(wT∗x)∗(1−g(wT∗x))
第三項的求導結果爲:
∂wT∗x∂wi=∂J(w1x1+w2x2+..+wnxn)∂wi=xi
所以,三項求導都完成了,我們可以得到最終的求導結果爲:
∂J(w)wi=wi−α∗xi∗[yi−g(wT∗x)]
OK,按照這個公式更新參數我們就可以完成得到最終的
w 了。
終於寫完了,累死我了。