Logistic regression 演算法
來深入了解內部運作,並實作一個 logistic regression 演算法。由於 statsmodels 的 logit() 函式相當複雜,你將先針對單一資料集實作簡單的 logistic regression。
我們不要用平方和作為衡量指標,而是使用概似度(likelihood)。不過,對數概似度(log-likelihood)在數值運算上更穩定,所以我們改用對數概似度。其實還有一個調整:我們想要最大化對數概似度,但 minimize() 預設是找最小值,因此改計算「負的」對數概似度會比較容易。
每筆觀測的對數概似度為: $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
要計算的指標是這些對數概似度貢獻的負和。
解釋變數(churn 的 time_since_last_purchase 欄)已以 x_actual 提供。
應變數(churn 的 has_churned 欄)已以 y_actual 提供。
logistic 已從 scipy.stats 匯入,logit() 與 minimize() 也已載入。
本練習屬於課程
使用 Python 的 statsmodels 進行迴歸分析:中級
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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]))