用 Logistic regression 預測機率

R 中的監督式學習:回歸

Nina Zumel and John Mount

Win-Vector LLC

預測機率

  • 預測事件「是否」發生(是/否):分類
  • 預測事件發生的「機率」:迴歸
  • 線性迴歸:預測範圍為 [$-\infty$, $\infty$]
  • 機率:限制在 [0,1] 區間內
    • 因此屬於非線性
R 中的監督式學習:回歸

範例:預測 Duchenne Muscular Dystrophy(DMD)

  • 輸出:has_dmd  輸入:CKH
R 中的監督式學習:回歸

線性迴歸模型

model <- lm(has_dmd ~ CK + H, 
            data = train)

test$pred <- predict(
    model, 
    newdata = test
)

輸出:has_dmd $\in$ {0,1}

  • 0:FALSE
  • 1:TRUE

模型會預測超出 [0:1] 範圍的值

R 中的監督式學習:回歸

Logistic Regression(邏輯斯迴歸)

$$ log(\frac{p}{1-p}) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... $$

glm(formula, data, family = binomial)
  • 廣義線性模型(GLM)
  • 假設輸入在「對數勝算」(log-odds)為加性、線性:$log( p/(1-p) )$
  • family:描述模型的誤差分佈
    • 邏輯斯迴歸:family = binomial
R 中的監督式學習:回歸

DMD 模型

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • 輸出:兩類,例如 $a$ 與 $b$
  • 模型回傳 $Prob(b)$
    • 建議:0/1 或 FALSE/TRUE
R 中的監督式學習:回歸

解讀邏輯斯迴歸模型

model
Call:  glm(formula = has_dmd ~ CK + H, family = binomial, data = train)

Coefficients:
(Intercept)           CK            H  
  -16.22046      0.07128      0.12552  

Degrees of Freedom: 86 Total (i.e. Null);  84 Residual
Null Deviance:       110.8 
Residual Deviance: 45.16     AIC: 51.16
R 中的監督式學習:回歸

用 glm() 模型做預測

predict(model, newdata, type = "response")
  • newdata:預設為訓練資料
  • 取得機率:使用 type = "response"
    • 預設:回傳對數勝算
R 中的監督式學習:回歸

DMD 模型

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
test$pred <- predict(model, newdata = test, type = "response")

R 中的監督式學習:回歸

評估邏輯斯迴歸:pseudo-$R^2$

$$ R^2 = 1 - \frac{RSS}{SS_{Tot}} $$

$$ pseudo R^2 = 1 - \frac{deviance}{null.deviance} $$

  • Deviance:類比於變異(RSS)
  • Null deviance:類似 $SS_{Tot}$
  • pseudo R^2:解釋的偏差量
R 中的監督式學習:回歸

訓練資料的 pseudo-$R^2$

使用 broom::glance()

glance(model) %>% 
  summarize(pR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.5922402

使用 sigr::wrapChiSqTest()

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
R 中的監督式學習:回歸

測試資料的 pseudo-$R^2$

# Test data
test %>% 
  mutate(pred = predict(model, newdata = test, type = "response")) %>%
  wrapChiSqTest("pred", "has_dmd", TRUE)

引數:

  • 資料框
  • 預測欄位名稱
  • 輸出欄位名稱
  • 目標值(目標事件)
R 中的監督式學習:回歸

增益曲線圖(Gain Curve)

GainCurvePlot(test, "pred","has_dmd", "DMD model on test")

R 中的監督式學習:回歸

一起來練習吧!

R 中的監督式學習:回歸

Preparing Video For Download...