天天看點

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

邏輯回歸基本概念

什麼是邏輯回歸?

邏輯回歸就是這樣的一個過程:面對一個回歸或者分類問題,建立代價函數,然後通過優化方法疊代求解出最優的模型參數,然後測試驗證我們這個求解的模型的好壞。

Logistic 回歸雖然名字裡帶“回歸”,但是它實際上是一種分類方法,主要用于兩分類問題(即輸出隻有兩種,分别代表兩個類别)

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

概念解釋

Logistic Regression

推導過程

它的表達式是:

f ( x ) = 1 1 + e − θ f(x) = \frac{1}{1 + e^{-\theta}} f(x)=1+e−θ1​

θ = W X + B \theta = WX + B θ=WX+B

可以發現,經過

sigmoid

函數轉換後, 輸出值是在

[0, 1]

之間,可以認為輸出是機率,下面就來詳細的推導:

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

推導

為了計算友善, 我們隻讨論二分類.

首先, 邏輯回歸進行了一個假設,

兩個類别都服從均值不同,方差相同(友善推導)的高斯分布

p ( y ∣ x = 0 ) = μ ( μ 0 , σ ) p(y|x=0) = \mu(\mu_0, \sigma) p(y∣x=0)=μ(μ0​,σ)

p ( y ∣ x = 1 ) = μ ( μ 1 , σ ) p(y|x=1) = \mu(\mu_1, \sigma) p(y∣x=1)=μ(μ1​,σ)

高斯分布是比較容易處理的分布,根據中心極限定理也知道,最終會收斂于高斯分布。

從資訊論的角度上看,當均值和方差已知時(盡管你并不知道确切的均值和方差,但是根據機率論,當樣本量足夠大時,樣本均值和方差以機率1趨向于均值和方差),高斯分布是熵最大的分布,為什麼要熵最大?因為最大熵的分布可以平攤你的風險(同一個值會有兩個點可以取到, 不确定性很大),這就好比不要把雞蛋放到同一個籃子裡,想想二分查找中,為什麼每次都是選取中間點作為查找點?就是為了平攤風險(假設方差相等隻是為了計算友善)。

風險

R i s k ( y = 0 ∣ x ) = λ 00 P ( y = 0 ∣ x ) + λ 01 P ( y = 1 ∣ x ) Risk(y=0|x) = \lambda_{00}P(y=0|x) + \lambda_{01}P(y = 1|x) Risk(y=0∣x)=λ00​P(y=0∣x)+λ01​P(y=1∣x)

R i s k ( y = 1 ∣ x ) = λ 10 P ( y = 0 ∣ x ) + λ 11 P ( y = 1 ∣ x ) Risk(y=1|x) = \lambda_{10}P(y=0|x) + \lambda_{11}P(y = 1|x) Risk(y=1∣x)=λ10​P(y=0∣x)+λ11​P(y=1∣x)

其中, R i s k ( y = 0 ∣ x ) Risk(y=0|x) Risk(y=0∣x)是把樣本預測為0時的風險, R i s k ( y = 1 ∣ x ) Risk(y=1|x) Risk(y=1∣x)是把樣本預測為1時的風險,

λ i j λ_{ij} λij​是樣本實際标簽為

j

時,卻把它預測為

i

是所帶來的風險。

我們認為預測正确并不會帶來風險,是以 λ 00 λ_{00} λ00​和 λ 11 λ_{11} λ11​都為0,此外,我們認為當标簽為0而預測為1 和 當标簽為1而預測為0,這兩者所帶來的風險是相等的,是以 λ 10 λ_{10} λ10​和 λ 01 λ_{01} λ01​相等,友善起見,我們記為λ。但在一些領域裡,比如醫學、風控等,這些λ在大多數情況下是不相等的,有時候我們會選擇“甯可錯殺一一千也不能放過一個”;

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

R i s k ( y = 0 ∣ x ) = λ P ( y = 1 ∣ x ) Risk(y=0|x) = \lambda P(y = 1|x) Risk(y=0∣x)=λP(y=1∣x)

R i s k ( y = 1 ∣ x ) = λ P ( y = 0 ∣ x ) Risk(y=1|x) = \lambda P(y=0|x) Risk(y=1∣x)=λP(y=0∣x)

根據最小化風險的原則,我們通常會選擇風險較小的。

比如:

R i s k ( y = 0 ∣ x ) &lt; R i s k ( y = 1 ∣ x ) Risk(y=0|x) &lt; Risk(y=1|x) Risk(y=0∣x)<Risk(y=1∣x)

這就說明了預測為第

類的風險小于預測為第

1

類的風險。

可以得到:

R i s k ( y = 0 ∣ x ) R i s k ( y = 1 ∣ x ) &lt; 1 \frac{Risk(y=0|x)}{Risk(y=1|x)} &lt; 1 Risk(y=1∣x)Risk(y=0∣x)​<1

P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) &lt; 1 \frac{P(y = 1|x)}{P(y=0|x)} &lt; 1 P(y=0∣x)P(y=1∣x)​<1

就是說明預測第

1

類的機率小于第

類的機率。

我們對不等式兩邊分别取對數

l o g P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) &lt; 0 log\frac{{P(y = 1|x)}}{{P(y=0|x)}} &lt; 0 logP(y=0∣x)P(y=1∣x)​<0

根據貝葉斯公式:

l o g P ( x ∣ y = 1 ) p ( y = 1 ) P ( x ∣ y = 0 ) p ( y = 0 ) &lt; 0 log\frac{P(x|y = 1)p(y=1)}{P(x|y=0)p(y=0)} &lt; 0 logP(x∣y=0)p(y=0)P(x∣y=1)p(y=1)​<0

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) + l o g p ( y = 1 ) p ( y = 0 ) &lt; 0 log\frac{P(x|y = 1)}{P(x|y=0)} + log\frac{p(y=1)}{p(y=0)} &lt; 0 logP(x∣y=0)P(x∣y=1)​+logp(y=0)p(y=1)​<0

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

高斯分布

g ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 g(x) = \frac{1}{2\pi\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}} g(x)=2πσ1​e−2σ2(x−μ)2​

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

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) + l o g e ( ( x − μ 0 ) 2 2 σ 2 − ( x − μ 1 ) 2 2 σ 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})} logP(x∣y=0)P(x∣y=1)​+loge(2σ2(x−μ0​)2​−2σ2(x−μ1​)2​)

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) + ( ( x − μ 0 ) 2 2 σ 2 − ( x − μ 1 ) 2 2 σ 2 ) &lt; 0 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}) &lt; 0 logP(x∣y=0)P(x∣y=1)​+(2σ2(x−μ0​)2​−2σ2(x−μ1​)2​)<0

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) &lt; ( x − μ 1 ) 2 2 σ 2 − ( x − μ 0 ) 2 2 σ 2 log\frac{P(x|y = 1)}{P(x|y=0)} &lt; \frac{(x - \mu_1)^2}{2\sigma^2} - \frac{(x - \mu_0)^2}{2\sigma^2} logP(x∣y=0)P(x∣y=1)​<2σ2(x−μ1​)2​−2σ2(x−μ0​)2​

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) &lt; μ 0 σ 2 x − μ 1 σ 2 x + C log\frac{P(x|y = 1)}{P(x|y=0)} &lt; \frac{\mu_0}{\sigma^2}x - \frac{\mu_1}{\sigma^2}x + C logP(x∣y=0)P(x∣y=1)​<σ2μ0​​x−σ2μ1​​x+C

C

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

l o g P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) &lt; θ X log\frac{P(x|y = 1)}{P(x|y=0)} &lt; \theta{X} logP(x∣y=0)P(x∣y=1)​<θX

詳細推導

對值取幂,以及等式取等号計算。

P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) = e θ x \frac{P(y=1|x)}{P(y=0|x)} = e^{\theta x} P(y=0∣x)P(y=1∣x)​=eθx

= P ( y = 1 ∣ x ) 1 − P ( y = 1 ∣ x ) = e θ x = \frac{P(y=1|x)}{1 - P(y=1|x)} = e^{\theta x} =1−P(y=1∣x)P(y=1∣x)​=eθx

= 1 − P ( y = 1 ∣ x ) P ( y = 1 ∣ x ) = e − θ x = \frac{1 - P(y=1|x)}{P(y=1|x)} = e^{-\theta x} =P(y=1∣x)1−P(y=1∣x)​=e−θx

= 1 P ( y = 1 ∣ x ) − 1 = e − θ x = \frac{1}{P(y=1|x)} - 1 = e^{-\theta x} =P(y=1∣x)1​−1=e−θx

= 1 P ( y = 1 ∣ x ) = e − θ x + 1 = \frac{1}{P(y=1|x)} = e^{-\theta x} + 1 =P(y=1∣x)1​=e−θx+1

= P ( y = 1 ∣ x ) = 1 e − θ x + 1 = P(y=1|x) = \frac{1}{e^{-\theta x} + 1} =P(y=1∣x)=e−θx+11​

以下是實作的一些截圖

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

優化我們采用梯度下降算法

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

交叉熵損失函數

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

最終效果

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

電腦端檢視完整代碼

——————————————————————————————————

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

繼續閱讀