Как работает логистическая регрессия

Промежуточная регрессия со statsmodels в Python

Maarten Van den Broeck

Content Developer at DataCamp

Сумма квадратов не подходит

np.sum((y_pred - y_actual) ** 2)

y_actual всегда равно 0 или 1.

y_pred находится между 0 и 1.

Сумма квадратов — не лучшая метрика.

Промежуточная регрессия со statsmodels в Python

Правдоподобие

       y_pred * y_actual
Промежуточная регрессия со statsmodels в Python

Правдоподобие

       y_pred * y_actual + (1 - y_pred) * (1 - y_actual)
Промежуточная регрессия со statsmodels в Python

Правдоподобие

np.sum(y_pred * y_actual + (1 - y_pred) * (1 - y_actual))

При y_actual = 1

y_pred * 1 + (1 - y_pred) * (1 - 1) = y_pred

При y_actual = 0

y_pred * 0 + (1 - y_pred) * (1 - 0) = 1 - y_pred
Промежуточная регрессия со statsmodels в Python

Логарифм правдоподобия

  • Вычисление правдоподобия предполагает сложение многих очень малых чисел, что приводит к численным ошибкам.
  • Логарифм правдоподобия вычисляется проще.
log_likelihood = np.log(y_pred) * y_actual + np.log(1 - y_pred) * (1 - y_actual)

Оба выражения дают одинаковый результат.

Промежуточная регрессия со statsmodels в Python

Отрицательный логарифм правдоподобия

Максимизация логарифма правдоподобия равносильна минимизации его отрицательного значения.

-np.sum(log_likelihoods)
Промежуточная регрессия со statsmodels в Python

Алгоритм логистической регрессии

def calc_neg_log_likelihood(coeffs)

intercept, slope = coeffs
# More calculation!
from scipy.optimize import minimize

minimize(
  fun=calc_neg_log_likelihood,
  x0=[0, 0]
)
Промежуточная регрессия со statsmodels в Python

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

Промежуточная регрессия со statsmodels в Python

Preparing Video For Download...