Logistisk regression för att förutsäga sannolikheter

Övervakad inlärning i R: Regression

Nina Zumel and John Mount

Win-Vector LLC

Förutsäga sannolikheter

  • Förutsäga om en händelse inträffar (ja/nej): klassificering
  • Förutsäga sannolikheten att en händelse inträffar: regression
  • Linjär regression: förutsäger värden i [$-\infty$, $\infty$]
  • Sannolikheter: begränsade till intervallet [0,1]
    • Därför kallas det icke-linjärt
Övervakad inlärning i R: Regression

Exempel: Förutsäga Duchenne muskeldystrofi (DMD)

  • utfall: has_dmd    indata: CK, H
Övervakad inlärning i R: Regression

En linjär regressionsmodell

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

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

utfall: has_dmd $\in$ {0,1}

  • 0: FALSE
  • 1: TRUE

Modellen förutsäger värden utanför intervallet [0:1]

Övervakad inlärning i R: Regression

Logistisk regression

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

glm(formula, data, family = binomial)
  • Generaliserad linjär modell
  • Antar att indata är additiva och linjära i log-odds: $log( p/(1-p) )$
  • family: beskriver modellens felfördelning
    • Logistisk regression: family = binomial
Övervakad inlärning i R: Regression

DMD-modell

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • utfall: två klasser, t.ex. $a$ och $b$
  • modellen returnerar $Prob(b)$
    • Rekommenderat: 0/1 eller FALSE/TRUE
Övervakad inlärning i R: Regression

Tolka logistiska regressionsmodeller

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
Övervakad inlärning i R: Regression

Förutsäga med en glm()-modell

predict(model, newdata, type = "response")
  • newdata: som standard används träningsdata
  • För att få sannolikheter: använd type = "response"
    • Som standard returneras log-odds
Övervakad inlärning i R: Regression

DMD-modell

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

Övervakad inlärning i R: Regression

Utvärdera en logistisk regressionsmodell: pseudo-$R^2$

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

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

  • Devians: analogt med varians (RSS)
  • Nolldevians: liknar $SS_{Tot}$
  • pseudo R^2: förklarad devians
Övervakad inlärning i R: Regression

Pseudo-$R^2$ på träningsdata

Med broom::glance()

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

Med sigr::wrapChiSqTest()

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
Övervakad inlärning i R: Regression

Pseudo-$R^2$ på testdata

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

Argument:

  • dataram
  • kolumnnamn för förutsägelse
  • kolumnnamn för utfall
  • målvärde (målhändelse)
Övervakad inlärning i R: Regression

Gain curve-diagram

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

Övervakad inlärning i R: Regression

Nu kör vi en övning!

Övervakad inlärning i R: Regression

Preparing Video For Download...