Logistic 回归算法
让我们深入内部机制,实现一个 logistic 回归算法。由于 statsmodels 的 logit() 函数非常复杂,您将在这里实现针对单个数据集的简单 logistic 回归。
我们不再使用平方和作为度量,而是使用似然。不过,对数似然在数值上更稳定,因此改用对数似然。实际上还有一个变化:我们希望最大化对数似然,而 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 提供。
已从 scipy.stats 导入 logistic,并已加载 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]))