求助将公式D=2∑ni=1{Ylog[YE(Y)]−[Y−E(Y)]}转换为Python代码
公式转Python实现
你需要实现的是似然比偏差统计量,修正后正确公式逻辑为:
$D = 2 \sum_{i=1}^n \left[ Y_i \log\left( \frac{Y_i}{E(Y)} \right) - (Y_i - E(Y)) \right]$
符号说明:
- $Y_i$:第i个实际观测值
- $E(Y)$:观测值序列Y的均值(期望)
- $n$:观测值总数量
NumPy高效实现(适合大数据量场景)
import numpy as np def calc_deviance(y): e_y = np.mean(y) # 添加极小值避免观测值为0时出现log(0)报错 eps = 1e-10 sum_item = np.sum(y * np.log((y + eps) / e_y) - (y - e_y)) return 2 * sum_item
注:代码中添加的1e-10极小值是为了规避观测值为0时
log(0)的数值报错,不会影响正常计算的结果精度。
纯Python实现(无第三方库依赖)
import math def calc_deviance_basic(y): n = len(y) e_y = sum(y) / n eps = 1e-10 sum_item = 0 for yi in y: sum_item += yi * math.log((yi + eps) / e_y) - (yi - e_y) return 2 * sum_item
调用示例
# 测试数据 test_y = [2, 4, 5, 7, 9] print(calc_deviance(test_y))
内容的提问来源于stack exchange,提问作者BinQuan
相关产品推荐
相关产品推荐

