Algorytm regresji logistycznej
Zajrzyjmy pod maskę i zaimplementujmy algorytm regresji logistycznej. Ponieważ funkcja logit() z biblioteki statsmodels jest bardzo złożona, ograniczymy się do prostej regresji logistycznej dla jednego zbioru danych.
Zamiast sumy kwadratów jako miary jakości modelu, użyjemy wiarygodności. Jednak log-wiarygodność jest bardziej stabilna obliczeniowo, więc skorzystamy z niej. Jest jeszcze jedna zmiana: ponieważ chcemy maksymalizować log-wiarygodność, a minimize() domyślnie szuka minimum, łatwiej jest obliczać ujemną log-wiarygodność.
Wartość log-wiarygodności dla każdej obserwacji wynosi $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
Miarą do obliczenia jest ujemna suma tych składników log-wiarygodności.
Wartości zmiennej objaśniającej (kolumna time_since_last_purchase zbioru churn) są dostępne jako x_actual.
Wartości zmiennej odpowiedzi (kolumna has_churned zbioru churn) są dostępne jako y_actual.
logistic jest zaimportowane z scipy.stats, a logit() i minimize() są również wczytane.
To ćwiczenie jest częścią kursu
Regresja średnio zaawansowana ze statsmodels w Pythonie
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Complete the function
def calc_neg_log_likelihood(coeffs):
# Unpack coeffs
____, ____ = ____
# Calculate predicted y-values
y_pred = ____
# Calculate log-likelihood
log_likelihood = ____
# Calculate negative sum of log_likelihood
neg_sum_ll = ____
# Return negative sum of log_likelihood
return ____
# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))