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

如何在L-BFGS-B优化迭代中获取lambda参数的每步估计值?

获取mle()迭代过程中L-BFGS-B方法的参数估计值

Great question! The default trace=TRUE (which maps to trace=1 in optim()) for the L-BFGS-B method only outputs the function values, not the parameter estimates during iterations. Here are two reliable ways to capture the lambda values at each step:

方法一:在负对数似然函数中添加追踪代码

你可以修改你的nLL函数,让它在每次被调用时记录当前的lambda值。这样每一次迭代时,只要函数被评估,就能追踪到参数的变化:

library(stats4)
x <- 0:10
y <- c(26, 17, 13, 12, 20, 5, 9, 8, 5, 4, 8)

# 用环境变量存储追踪结果,避免污染全局命名空间
trace_env <- new.env()
trace_env$lambda_trace <- c()

nLL <- function(lambda) {
  # 记录当前lambda值到环境变量中
  trace_env$lambda_trace <- c(trace_env$lambda_trace, lambda)
  # 计算负对数似然
  -sum(stats::dpois(y, lambda, log = TRUE))
}

# 拟合模型
fit0 <- mle(nLL, start = list(lambda = 5), nobs = NROW(y), method = "L-BFGS-B")

# 查看迭代过程中的lambda值
print(trace_env$lambda_trace)

运行后,trace_env$lambda_trace会保存优化过程中所有评估过的lambda参数点,你可以直接查看或者用于后续分析。

方法二:利用optim的高级trace选项(版本依赖)

在部分R版本中,将control参数里的trace设置为3(而非TRUE/1),L-BFGS-B优化器会输出更详细的迭代信息,包括当前的参数值:

# 重置原始的nLL函数,避免追踪代码干扰
nLL <- function(lambda) -sum(stats::dpois(y, lambda, log = TRUE))

fit0 <- mle(nLL, start = list(lambda = 5), nobs = NROW(y), 
            method = "L-BFGS-B", control = list(trace = 3))

不过这个方法的输出格式比较原始,且不同R版本或底层优化库的表现可能不一致,因此方法一的自定义追踪方式更稳定可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:10:48