Aan de slagBegin gratis

Algoritme voor logistische regressie

Laten we de binnenkant induiken en een logistische-regressie-algoritme implementeren. Omdat de logit()-functie van statsmodels erg complex is, houd je het hier bij een eenvoudige logistische regressie voor één gegevensset.

In plaats van de som van kwadraten als maatstaf te gebruiken, willen we likelihood gebruiken. Log-likelihood is echter rekenkundig stabieler, dus die gebruiken we. Er is nog één verandering: we willen de log-likelihood maximaliseren, maar minimize() zoekt standaard naar minima. Daarom is het makkelijker om de negatieve log-likelihood te berekenen.

De log-likelihood voor elke observatie is $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

De te berekenen maatstaf is de negatieve som van deze log-likelihood-bijdragen.

De verklarende waarden (de kolom time_since_last_purchase van churn) zijn beschikbaar als x_actual. De responswaarden (de kolom has_churned van churn) zijn beschikbaar als y_actual. logistic is geïmporteerd uit scipy.stats, en logit() en minimize() zijn ook geladen.

Deze oefening maakt deel uit van de cursus

Gemiddelde regressie met statsmodels in Python

Bekijk cursus

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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]))
Code bewerken en uitvoeren