1. 程式人生 > >logistic regression(二項 logistic 與 多項logistic )

logistic regression(二項 logistic 與 多項logistic )

邏輯斯蒂迴歸

  1. 基本思想
  2. 數學推導
  3. 基於R的案例
  4. 結論

基本思想

這一講給大家介紹一下,廣義線性迴歸模型當中的一個最為典型的模型,邏輯斯底迴歸(logistic regression)。估計大家都見過。我們最長用到的是二值邏輯斯底迴歸,多項邏輯斯底書裡邊介紹的少。今天我們重點說一下,二項邏輯斯底迴歸和多項邏輯斯底迴歸。我們先簡單聊聊傳統的線性迴歸,我們說線性迴歸就是y=k0+k1x,這個時候呢,因變數y有要求,最起碼得是連續的變數。如果y是離散的比如它只能取0,1兩個變數,那麼此時傳統迴歸就不行了。大家想想,如果在y=k0+k1x當中,左邊是離散的變數,範圍只有(0,1),而右邊呢,是連續的而且右邊整體的變化範圍是

+,.要想讓等式在這種情況下成立,必須做個變化,要麼就是把左邊變成(+,)。要麼就是把右邊變成(0,1),最好是用個連續的函式作為變換函式,如果太複雜的變化也不好。不利於後面的計算。如果大家稍微思考一下,就發現直接變化不行,為啥呢,比如我們想把右邊變成0,1兩個值不行,但是可以將其變成(0,1)內的數。比如任何一個數,經過exex+1變換就小了很多了。所以,我們先把左邊給改造一下,但是改造還必須得有含義。不能說改造完了之後意義變了。這裡我們想到了二項分佈,二項分佈是把0,1兩個值與概率p,1p對應起來。如果我們構造一個p1p,那麼它的變化範圍是(0,+),這樣構造有意義嗎,很有意義,這個比例越大說明1
這種情況越容易發生,0這種情況不容易發生,滿足了越大越代表一種情況。越小又代表另一種情況。這樣呢,我們先把左邊變成了(0,+).而右邊呢,是(+,)。再經過一次變換就好了。哪個函式可以做到呢。對數函式log可以。這樣的話,我們就得到下式:

log(p1p)(+,).於是我們建立下面的迴歸方程。
log(p1p)=k0+k1x
這就是邏輯斯蒂迴歸方程了。這樣呢,每個個體實際上現在與一個概率p對應起來了。通過簡單變換,我們可以看到,pi=ek0+k1xiek0+k1xi+1,這樣的話,就可以按極大似然的方式進行計算引數k0,k1了。當然具體計算過程還是比較複雜的。這個是從統計的角度來看待logistic regression迴歸的。還可以從機器學習的角度來看待,用隨機梯度下降進行求解。後面我們在介紹。
一旦方程建立了,迴歸係數也已經求出,那麼我們需要了解迴歸係數的意義。在傳統迴歸當中,迴歸係數比較容易理解,比如一單位x
的變化可以帶來多少y的變化。而在logistic 迴歸當中代表的是一單位x的變化,帶來ep1p的變化,這個變化還是表示1發生的概率相對增加了多少。因此,通俗地說,就是k大於0時,有利於發生,k小於0時,不利於發生。
係數的解釋是一個方面,另一個方面就是擬合優度(goodness of fit),我們傳統迴歸是根據R2或者是調整R2進行判斷,但是呢。在logistic 迴歸當中無法計算。因此又提出個新的指標,地位和R2一樣的,叫deviance。deviance越小,越好,後面我們專門會個大家介紹一下。

基於R的logistic regression

下面給大家帶來一個小小的案例

#廣義線性迴歸模型
#logistic 迴歸
#清楚空間變數
rm(list = ls())
#讀取資料
pass.df <- read.csv("D:/Rdata/data/rintro-chapter9.csv")
#檢視前五行
head(pass.df)
  Channel  Promo    Pass
1    Mail Bundle YesPass
2    Mail Bundle YesPass
3    Mail Bundle YesPass
4    Mail Bundle YesPass
5    Mail Bundle YesPass
6    Mail Bundle YesPass
#檢視資料型別
str(pass.df)
'data.frame':   3156 obs. of  3 variables:
 $ Channel: Factor w/ 3 levels "Email","Mail",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Promo  : Factor w/ 2 levels "Bundle","NoBundle": 1 1 1 1 1 1 1 1 1 1 ...
 $ Pass   : Factor w/ 2 levels "NoPass","YesPass": 2 2 2 2 2 2 2 2 2 2 ...
#進行迴歸
pass.m1 <- glm(Pass ~Promo, data=pass.df, family=binomial)
#檢視結果
summary(pass.m1)
Call:
glm(formula = Pass ~ Promo, family = binomial, data = pass.df)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.262  -1.097   1.095   1.095   1.260  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept)    0.19657    0.04912   4.002 6.28e-05 ***
PromoNoBundle -0.38879    0.07167  -5.425 5.81e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 4375.0  on 3155  degrees of freedom
Residual deviance: 4345.4  on 3154  degrees of freedom
AIC: 4349.4

Number of Fisher Scoring iterations: 3

結論

這一節我們講了logistic regression,主要是從轉換的角度講的,首先是通過構造比例,也就是p1p,在此基礎上進行迴歸分析。