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
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]))