Zacznij terazZacznij za darmo

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

Zobacz kurs

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]))
Edytuj i uruchom kod