You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为指数分布构造log-likelihood函数及参数计算的实现是否正确?

指数分布对数似然实现正确性判断

结论

你的整体实现思路是对的,但存在2个需要修正的小问题:

  • 参数命名和定义不匹配
    你当前代码里的scale变量实际对应的是指数分布的率参数λ(概率密度为$f(x)=\lambda e^{-\lambda x},x>0$),对应的对数似然公式确实是$lnL = nln\lambda - \lambda\sum x_i$,计算逻辑没有问题。但指数分布的尺度参数定义为$\beta=1/\lambda$,如果你需求里的scale实际是尺度参数,那对数似然要改成y = -len(data)*np.log(scale) - sum(data)/scale。
  • 参数采样范围边界错误
    你用np.linspace(0,1,100)生成候选参数时,第一个值是0,$ln(0)$是负无穷,会触发numpy的运行时警告,同时这个点没有实际意义。建议把起始值改成极小的正数,比如1e-6,同时可以把采样数调到101保证覆盖区间的均匀点,满足至少100个取值的要求。

修正后参考代码

import numpy as np
import matplotlib.pyplot as plt

# 和你原有计算逻辑一致的率参数λ版本对数似然
def log_likelihood(lmbd, data):
    n = len(data)
    return n * np.log(lmbd) - lmbd * np.sum(data)

# 生成100个(0,1]区间的均匀候选值
params = np.linspace(1e-6, 1, 100)
# 计算对数似然
L = log_likelihood(params, trans_data.Sales_Amount)
# 输出最大似然估计值
print("最优率参数:", params[L.argmax()])
# 画图
plt.plot(params, L)
plt.xlabel("率参数λ")
plt.ylabel("对数似然值")
plt.show()

补充说明

如果你的数据集里存在等于0的观测值,指数分布默认不支持x=0,需要提前做数据清洗剔除0值,否则对数似然计算也会出现异常。


内容的提问来源于stack exchange,提问作者user17059762

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:36:03