機器學習分享——邏輯迴歸推導以及 numpy 的實現

邏輯迴歸基本概念

什麼是邏輯迴歸? 邏輯迴歸就是這樣的一個過程:面對一個迴歸或者分類問題,創建代價函數,而後經過優化方法迭代求解出最優的模型參數,而後測試驗證咱們這個求解的模型的好壞。算法

Logistic 迴歸雖然名字裏帶「迴歸」,可是它其實是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別表明兩個類別)函數

迴歸模型中,y是一個定性變量,好比y=0或1,logistic方法主要應用於研究某些事件發生的機率測試

概念解釋優化

Logistic Regression推導過程

它的表達式是:人工智能

f(x) = \frac{1}{1 + e^{-\theta}}
\theta = WX + B

能夠發現,通過sigmoid函數轉換後, 輸出值是在[0, 1]之間,能夠認爲輸出是機率,下面就來詳細的推導:spa

推導

爲了計算方便, 咱們只討論二分類..net

首先, 邏輯迴歸進行了一個假設,兩個類別都服從均值不一樣,方差相同(方便推導)的高斯分佈3d

p(y|x=0) = \mu(\mu_0, \sigma)
p(y|x=1) = \mu(\mu_1, \sigma)

高斯分佈是比較容易處理的分佈,根據中心極限定理也知道,最終會收斂於高斯分佈。 從信息論的角度上看,當均值和方差已知時(儘管你並不知道確切的均值和方差,可是根據機率論,當樣本量足夠大時,樣本均值和方差以機率1趨向於均值和方差),高斯分佈是熵最大的分佈,爲何要熵最大?由於最大熵的分佈能夠平攤你的風險(同一個值會有兩個點能夠取到, 不肯定性很大),這就比如不要把雞蛋放到同一個籃子裏,想一想二分查找中,爲何每次都是選取中間點做爲查找點?就是爲了平攤風險(假設方差相等只是爲了計算方便)。code

風險cdn

Risk(y=0|x) = \lambda_{00}P(y=0|x) + \lambda_{01}P(y = 1|x)
Risk(y=1|x) = \lambda_{10}P(y=0|x) + \lambda_{11}P(y = 1|x)

其中,Risk(y=0|x)是把樣本預測爲0時的風險,Risk(y=1|x)是把樣本預測爲1時的風險, λ_{ij}是樣本實際標籤爲j時,卻把它預測爲i是所帶來的風險。

咱們認爲預測正確並不會帶來風險,所以λ_{00}λ_{11}都爲0,此外,咱們認爲當標籤爲0而預測爲1 和 當標籤爲1而預測爲0,這二者所帶來的風險是相等的,所以λ_{10}λ_{01}相等,方便起見,咱們記爲λ。但在一些領域裏,好比醫學、風控等,這些λ在大多數狀況下是不相等的,有時候咱們會選擇「寧肯錯殺一一千也不能放過一個」;

那麼咱們簡化後的表達式:

Risk(y=0|x) = \lambda P(y = 1|x)
Risk(y=1|x) = \lambda P(y=0|x)

根據最小化風險的原則,咱們一般會選擇風險較小的。

好比:

Risk(y=0|x) < Risk(y=1|x)

這就說明了預測爲第0類的風險小於預測爲第1類的風險。

能夠獲得:

\frac{Risk(y=0|x)}{Risk(y=1|x)} < 1
\frac{P(y = 1|x)}{P(y=0|x)} < 1

就是說明預測第1類的機率小於第0類的機率。

咱們對不等式兩邊分別取對數

log\frac{{P(y = 1|x)}}{{P(y=0|x)}} < 0

根據貝葉斯公式:

log\frac{P(x|y = 1)p(y=1)}{P(x|y=0)p(y=0)} < 0
log\frac{P(x|y = 1)}{P(x|y=0)} + log\frac{p(y=1)}{p(y=0)} < 0

咱們開始假設過,兩個類別分別服從均值不等,方差相等的高斯分佈,根據高斯分佈的公式有:

高斯分佈

g(x) = \frac{1}{2\pi\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}}

忽略常數項(方差也是相等的)

log\frac{P(x|y = 1)}{P(x|y=0)} + loge^{(\frac{(x - \mu_0)^2}{2\sigma^2} - \frac{(x - \mu_1)^2}{2\sigma^2})}
log\frac{P(x|y = 1)}{P(x|y=0)} + (\frac{(x - \mu_0)^2}{2\sigma^2} - \frac{(x - \mu_1)^2}{2\sigma^2}) < 0
log\frac{P(x|y = 1)}{P(x|y=0)} < \frac{(x - \mu_1)^2}{2\sigma^2} - \frac{(x - \mu_0)^2}{2\sigma^2}
log\frac{P(x|y = 1)}{P(x|y=0)} < \frac{\mu_0}{\sigma^2}x - \frac{\mu_1}{\sigma^2}x + C

C是常熟,可使用矩陣的表示。

log\frac{P(x|y = 1)}{P(x|y=0)} < \theta{X}

詳細推導

對值取冪,以及等式取等號計算。

\frac{P(y=1|x)}{P(y=0|x)} = e^{\theta x}
= \frac{P(y=1|x)}{1 - P(y=1|x)} = e^{\theta x}
= \frac{1 - P(y=1|x)}{P(y=1|x)} = e^{-\theta x}
= \frac{1}{P(y=1|x)} - 1 = e^{-\theta x}
= \frac{1}{P(y=1|x)} = e^{-\theta x} + 1
= P(y=1|x) = \frac{1}{e^{-\theta x} + 1}

如下是實現的一些截圖

優化咱們採用梯度降低算法

交叉熵損失函數

最終效果

電腦端查看完整代碼

———————————— Mo (網址:momodel.cn )是一個支持 Python 的人工智能建模平臺,能幫助你快速開發訓練並部署 AI 應用。期待你的加入。

相關文章
相關標籤/搜索