邏輯迴歸
邏輯迴歸是一個簡單的分類算法。
之前介紹過線性迴歸:https://blog.csdn.net/sxf1061926959/article/details/66976356
線性迴歸是最基本的迴歸模型,建議瞭解邏輯迴歸前可以先了解下線性迴歸。
其實如果只是想單純的解決問題,線性迴歸也可以用於解決二分類問題,只需要對輸出的值設定一個閾值即可實現;
但是線性迴歸在計算誤差的時候,起數據域內的所有數,包括異常值,對模型的的影響是一樣的,數據對模型的敏感度不會應數據的偏離程度發生變化。但是在分類問題中,其實最難區分的是邊界附近的數據,而那些可以肯定是正類或者負類的數據並不是那麼重要。
而且爲了讓算法的目標和建模的目的一致,需要對模型輸出的結果進行映射到不同類目上,即線性迴歸的實數域映射到[0,1]兩個值上。有個躍階函數是這樣的: ,從目的的角度來說可以解決問題了,但是這個並不是連續可導函數,並不能解決我們上面提出的異常值對模型敏感度一致的問題,我們需要一個可導函數,將這個函數直接應用到模型優化過程中去。這裏就要引出sigmoid函數了,該函數滿足了該要求。
sigmoid推導
這裏我們假設樣本點爲 ,我們知道線性迴歸其實是將每個特徵加上一個對應的權值來獲得最後的輸出結果。那麼這個思想其實可以擴展到分類問題上。
定義一個最簡單的假設,假設現在需要做的是二分類,類別分別爲0和1,並且樣本點x針對x屬於類別0和1的權值爲和,權值對應到每個特徵爲和。
線性迴歸模型的公式是這樣的,我們把b作爲就可以簡化爲,這樣我們如果y只有0和1兩個值的時候,其實就是一個分類任務。我們先對公式做一個恆等變換,加上一個指數函數,可以得到,這樣的話我們就開始計算樣本點x屬於,如下,我們可以分別計算出樣本點屬於0和1的輸出值:
加上我們上面定義的恆等變換,就是
對於分類問題,我們期待的不是輸出一個實數域的值,最好的是希望得到輸出值屬於某個類的概率,並且他們的概率和應該等於1.
所以我們可以得出如下的概率:
因爲他們兩的概率和爲1,所以可以簡化爲
而可以進一步化簡,分子分母同除以就可以得到:
,我們再把定義爲w,就能得到
,看見了嗎?sigmoid函數出來了
交叉熵
現在經過sigmoid函數,模型有了輸出,然後就可以定義優化函數進行優化了,首先還是按之前線性迴歸的推導思路,需要定義一個最大似然函數
公式比較難寫,直接上網複製了一個。然後就是正常的似然函數解法,加log轉換,再最大化轉最小化:
而這個函數其實就是交叉熵損失函數,神經網絡的早期,在用梯度下降優化神經網絡的時候,一直用的是求平方誤差MSE,但是平方誤差存在一個嚴重的問題,因爲求導後的函數裏存在sigmoid(x)(1-sigmoid(x))這一項,這一項是sigmoid以及其導數的乘積。正是因爲這個,導致了嚴重了梯度消失問題,但是交叉熵並沒有解決梯度消失問題,而是緩解。好了扯遠了。
在實際編程中交叉熵的定義有時候會出現一些小bug,我在這裏做了簡單的介紹https://blog.csdn.net/sxf1061926959/article/details/83821733。
優化函數有了,就可以直接利用梯度下降算法進行優化了,我在https://blog.csdn.net/sxf1061926959/article/details/72728244介紹了詳細的梯度下降推導,可以參考學習。當然具體的優化方法不止梯度下降算法,還可以使用擬牛頓法來高效訓練,如LBFGS。
本部分是個人對邏輯迴歸的理解。