Logistische Regression zur Vorhersage von Wahrscheinlichkeiten

Überwachtes Lernen in R: Regression

Nina Zumel and John Mount

Win-Vector LLC

Wahrscheinlichkeiten vorhersagen

  • Vorhersagen, ob ein Ereignis eintritt (ja/nein): Klassifikation
  • Vorhersagen der Wahrscheinlichkeit, dass ein Ereignis eintritt: Regression
  • Lineare Regression: sagt Werte in [$-\infty$, $\infty$] voraus
  • Wahrscheinlichkeiten: auf [0,1] begrenzt
    • Daher nennen wir das nichtlinear
Überwachtes Lernen in R: Regression

Beispiel: Duchenne-Muskeldystrophie (DMD) vorhersagen

  • Zielvariable: has_dmd    Eingaben: CK, H
Überwachtes Lernen in R: Regression

Ein lineares Regressionsmodell

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

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

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

  • 0: FALSE
  • 1: TRUE

Modell sagt Werte außerhalb des Bereichs [0:1] voraus

Überwachtes Lernen in R: Regression

Logistische Regression

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

glm(formula, data, family = binomial)
  • Verallgemeinertes lineares Modell
  • Nimmt additive, lineare Eingaben in den Log-Odds an: $log( p/(1-p) )$
  • family: beschreibt die Fehlerverteilung des Modells
    • logistische Regression: family = binomial
Überwachtes Lernen in R: Regression

DMD-Modell

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • Zielvariable: zwei Klassen, z. B. $a$ und $b$
  • Modell liefert $Prob(b)$
    • Empfehlung: 0/1 oder FALSE/TRUE
Überwachtes Lernen in R: Regression

Logistische Regressionsmodelle interpretieren

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
Überwachtes Lernen in R: Regression

Mit einem glm()-Modell vorhersagen

predict(model, newdata, type = "response")
  • newdata: standardmäßig Trainingsdaten
  • Um Wahrscheinlichkeiten zu erhalten: type = "response"
    • Standard: gibt Log-Odds zurück
Überwachtes Lernen in R: Regression

DMD-Modell

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

Überwachtes Lernen in R: Regression

Ein logistisches Regressionsmodell bewerten: Pseudo-$R^2$

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

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

  • Devianz: analog zur Varianz (RSS)
  • Null-Devianz: ähnlich zu $SS_{Tot}$
  • pseudo R^2: erklärte Devianz
Überwachtes Lernen in R: Regression

Pseudo-$R^2$ auf Trainingsdaten

Mit broom::glance()

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

Mit sigr::wrapChiSqTest()

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
Überwachtes Lernen in R: Regression

Pseudo-$R^2$ auf Testdaten

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

Argumente:

  • Data Frame
  • Name der Spalte mit Vorhersagen
  • Name der Zielspalte
  • Zielwert (Zielereignis)
Überwachtes Lernen in R: Regression

Das Gain-Curve-Diagramm

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

Überwachtes Lernen in R: Regression

Lass uns üben!

Überwachtes Lernen in R: Regression

Preparing Video For Download...