Логистическая регрессия для предсказания вероятностей

Обучение с учителем в R: регрессия

Nina Zumel and John Mount

Win-Vector LLC

Предсказание вероятностей

  • Предсказание факта наступления события (да/нет): классификация
  • Предсказание вероятности наступления события: регрессия
  • Линейная регрессия: предсказывает значения в [$-\infty$, $\infty$]
  • Вероятности: ограничены интервалом [0,1]
    • Поэтому используем нелинейный подход
Обучение с учителем в R: регрессия

Пример: предсказание мышечной дистрофии Дюшенна (DMD)

  • результат: has_dmd    входные данные: CK, H
Обучение с учителем в 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: регрессия

Логистическая регрессия

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

glm(formula, data, family = binomial)
  • Обобщённая линейная модель
  • Предполагает аддитивный линейный вклад входных данных в логарифм шансов: $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: регрессия

Оценка модели логистической регрессии: псевдо-$R^2$

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

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

  • Девианс: аналог дисперсии (RSS)
  • Нулевой девианс: аналог $SS_{Tot}$
  • pseudo R^2: объяснённый девианс
Обучение с учителем в R: регрессия

Псевдо-$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: регрессия

Псевдо-$R^2$ на тестовых данных

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

Аргументы:

  • фрейм данных
  • название столбца с предсказаниями
  • название столбца с результатом
  • целевое значение (целевое событие)
Обучение с учителем в R: регрессия

График кривой прироста

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

Обучение с учителем в R: регрессия

Давайте потренируемся!

Обучение с учителем в R: регрессия

Preparing Video For Download...