Kom igångKom igång gratis

Algoritm för logistisk regression

Låt oss titta närmare på det inre och implementera en algoritm för logistisk regression. Eftersom statsmodels logit()-funktion är mycket komplex, håller vi oss till att implementera enkel logistisk regression för en enda datamängd.

I stället för att använda minsta kvadratmetoden som mätvärde vill vi använda likelihood. Log-likelihood är dock beräkningsmässigt stabilare, så vi använder det i stället. Det finns ytterligare en förändring: eftersom vi vill maximera log-likelihood, men minimize() som standard söker efter minimumvärden, är det enklare att beräkna den negativa log-likelihood.

Log-likelihood-värdet för varje observation är $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

Mätvärdet som ska beräknas är den negativa summan av dessa log-likelihood-bidrag.

förklaringsvariabelvärdena (kolumnen time_since_last_purchase i churn) finns tillgängliga som x_actual. Utfallsvärdena (kolumnen has_churned i churn) finns tillgängliga som y_actual. logistic är importerat från scipy.stats, och logit() samt minimize() är också inladdade.

Den här övningen är en del av kursen

Intermediär regression med statsmodels i Python

Visa kurs

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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]))
Redigera och kör kod