gpt4 book ai didi

optimization - 超越 R 的优化功能

转载 作者:行者123 更新时间:2023-12-03 11:39:49 28 4
gpt4 key购买 nike

我正在尝试使用 R 来估计具有手动规范的多项 logit 模型。我找到了一些可以让您估计 MNL 模型的软件包 herehere .

我发现了一些关于“滚动”你自己的 MLE 函数的其他著作 here .但是,从我的挖掘来看 - 所有这些功能和包都依赖于内部 optim功能。

在我的基准测试中,optim是瓶颈。使用具有约 16000 个观测值和 7 个参数的模拟数据集,R 在我的机器上需要大约 90 秒。 Biogeme中的等效模型需要大约 10 秒。在Ox中自己写代码的同事对于相同的模型,报告大约 4 秒。

有没有人有编写自己的 MLE 函数的经验,或者可以向我指出超出默认值的优化方向 optim功能(没有双关语意)?

如果有人想要 R 代码重新创建模型,请告诉我 - 我很乐意提供。我没有提供它,因为它与优化 optim 的问题没有直接关系。功能和保留空间...

编辑:感谢大家的想法。根据下面的无数评论,我们能够在更复杂的模型中获得与 Biogeme 相同的 R,并且对于我们运行的几个更小/更简单的模型,R 实际上更快。我认为这个问题的长期解决方案将涉及编写一个独立的最大化函数,该函数依赖于 fortran 或 C 库,但我肯定对其他方法持开放态度。

最佳答案

已经尝试过 nlm() 函数了吗?不知道它是否更快,但它确实提高了速度。还要检查选项。 optim 使用慢算法作为默认值。通过使用准牛顿算法(method="BFGS")而不是默认算法,您可以获得 > 5 倍的加速。如果您不太关心最后一位数字,您还可以将 nlm() 的容差级别设置得更高,以获得额外的速度。

f <- function(x) sum((x-1:length(x))^2)

a <- 1:5

system.time(replicate(500,
optim(a,f)
))
user system elapsed
0.78 0.00 0.79

system.time(replicate(500,
optim(a,f,method="BFGS")
))
user system elapsed
0.11 0.00 0.11

system.time(replicate(500,
nlm(f,a)
))
user system elapsed
0.10 0.00 0.09

system.time(replicate(500,
nlm(f,a,steptol=1e-4,gradtol=1e-4)
))
user system elapsed
0.03 0.00 0.03

关于optimization - 超越 R 的优化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757321/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com