BaşlayınÜcretsiz başlayın

Lojistik regresyon algoritması

Haydi iç dinamiklere inip bir lojistik regresyon algoritması yazalım. statsmodels içindeki logit() işlevi oldukça karmaşık olduğundan, tek bir veri kümesi için basit bir lojistik regresyon uygulamakla yetineceksin.

Kareler toplamını metrik olarak kullanmak yerine olasılık (likelihood) kullanmak istiyoruz. Ancak log-olasılık (log-likelihood) hesaplama açısından daha kararlı olduğundan onu kullanacağız. Aslında bir değişiklik daha var: log-olasılığı en büyüklemek istediğimiz, ama minimize() varsayılan olarak en küçük değeri bulduğu için, hesaplamayı negatif log-olasılık üzerinden yapmak daha kolay.

Her gözlem için log-olasılık değeri $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$ şeklindedir.

Hesaplanacak metrik, bu log-olasılık katkılarının negatif toplamıdır.

Açıklayıcı değerler (churn veri kümesindeki time_since_last_purchase sütunu) x_actual olarak hazır. Tepki değerleri (churn veri kümesindeki has_churned sütunu) y_actual olarak hazır. logistic scipy.stats içinden içe aktarılmıştır ve logit() ile minimize() de yüklüdür.

Bu egzersiz, kursun bir parçasıdır

Python ile statsmodels'da Orta Düzey Regresyon

Kursa Göz Atın

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

# 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]))
Kodu Düzenle ve Çalıştır