Inizia subitoInizia gratis

Algoritmo di regressione logistica

Esploriamo cosa succede “dietro le quinte” e implementiamo un algoritmo di regressione logistica. Dato che la funzione logit() di statsmodels è molto complessa, ci limiteremo a implementare una regressione logistica semplice per un singolo insieme di dati.

Invece di usare la somma dei quadrati come metrica, vogliamo usare la verosimiglianza. Tuttavia, il log-verosimiglianza è più stabile dal punto di vista computazionale, quindi useremo quello. C’è in realtà un’ulteriore modifica: dato che vogliamo massimizzare il log-verosimiglianza, ma minimize() per impostazione predefinita trova valori minimi, è più semplice calcolare la negativa del log-verosimiglianza.

Il valore di log-verosimiglianza per ciascuna osservazione è $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

La metrica da calcolare è la somma negativa di questi contributi di log-verosimiglianza.

I valori esplicativi (la colonna time_since_last_purchase di churn) sono disponibili come x_actual. I valori risposta (la colonna has_churned di churn) sono disponibili come y_actual. logistic è importato da scipy.stats, e logit() e minimize() sono già caricati.

Questo esercizio fa parte del corso

Regressione intermedia con statsmodels in Python

Visualizza corso

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# 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]))
Modifica ed esegui il codice