基于R语言的Hawkes点过程beta参数优化方法咨询
Hawkes点过程beta参数拟合代码正确性咨询
我有一个含1000个节点的数据集,节点间存在“认识/不认识”的关系,想用Hawkes点过程预测节点行为。当前需要优化模型参数:假设节点邻接关系作为Hawkes模型的alpha输入,所有节点的背景强度lambda0为常数,目标求解衰减函数参数beta。我写了一段可运行的R代码,但不确定是否能正确计算beta参数,特来咨询。
library(hawkes) # 多变量Hawkes过程 - 10个节点示例 lambda0 <- c(rep(0.2,10)) # 所有节点背景强度设为相同常数 alpha <- matrix(c(0.05,0.05,0,0.05,0,0.05,0.05,0,0,0.05, # 邻接矩阵:0.05表示存在连接,0表示无连接 0.05,0.05,0,0,0,0,0,0,0,0, 0,0,0.05,0,0,0,0,0,0,0, 0.05,0,0,0.05,0,0,0,0,0,0, 0,0,0,0,0.05,0,0,0,0,0, 0.05,0,0,0,0,0.05,0,0,0,0, 0.05,0,0,0,0,0,0.05,0,0,0, 0,0,0,0,0,0,0,0.05,0,0, 0,0,0,0,0,0,0,0,0.05,0, 0.05,0,0,0,0,0,0,0,0,0.05 ),byrow=TRUE,nrow=10) beta <- c(rep(0.7,10)) # 设置beta初始值用于生成事件历史 history <- simulateHawkes(lambda0,alpha,beta,3600) # 模拟1小时内的10节点事件历史 nloglik_bi_hawkes <- function(params, history){ beta <- c(params[1], params[2],params[3], params[4],params[5], params[6],params[7], params[8],params[9], params[10]) # 实际场景是1000节点,需优化更多beta参数 return(likelihoodHawkes(lambda0, alpha, beta, history)) } params_hawkes <- optim(c(rep(1,10)), nloglik_bi_hawkes, history = history) # 存储优化后的beta值
代码核心逻辑合理性
你的代码通过optim最小化似然相关函数来拟合beta参数,这是Hawkes过程参数估计的标准思路,方向是正确的。
需注意的潜在问题
- 高维场景优化效率:1000节点对应1000个beta参数,
optim默认的Nelder-Mead算法会极慢甚至无法收敛,建议改用method = "L-BFGS-B"这类适合高维的算法;若业务允许,可假设所有节点共享同一beta参数,大幅降低优化维度。 - 参数约束与初始化:beta作为衰减参数必须为正数,优化时要添加下界约束(比如
L-BFGS-B设置lower = rep(1e-4, 1000));初始值可设为模拟用的真实值0.7附近,帮助算法更快收敛。 - 似然函数确认:务必查
hawkes包文档确认likelihoodHawkes返回的是对数似然还是负对数似然。如果是对数似然,需要在目标函数里返回-likelihoodHawkes(...)才能实现最大化似然;如果是负对数似然,当前代码逻辑才正确。可以用模拟的真实beta和随机beta代入函数做简单验证。 - 小数据集验证:先在10节点的模拟数据上测试,对比优化后的beta和真实值
0.7,若结果接近,再推广到1000节点场景。
内容的提问来源于stack exchange,提问作者LPM
相关产品推荐
相关产品推荐

