小编smi*_*ner的帖子

用 Rcpp 优化 R 目标函数变慢,为什么?

我目前正在研究一种贝叶斯方法,该方法需要在每次迭代中对多项式 logit 模型进行多个优化步骤。我正在使用 optim() 来执行这些优化,并使用 R 编写的目标函数。分析显示 optim() 是主要瓶颈。

在挖掘之后,我发现了这个问题,他们建议重新编码目标函数Rcpp可以加快进程。我遵循了建议并用 重新编码了我的目标函数Rcpp,但它最终变慢了(大约慢了两倍!)。

这是我第一次使用Rcpp(或任何与 C++ 相关的东西),我无法找到一种对代码进行矢量化的方法。知道如何使它更快吗?

Tl; dr:当前 Rcpp 中函数的实现不如矢量化 R 快;如何让它更快?

一个可重现的例子

  1. Rand 中定义目标函数Rcpp:仅截取多项式模型的对数似然
library(Rcpp)
library(microbenchmark)

llmnl_int <- function(beta, Obs, n_cat) {
  n_Obs     <- length(Obs)
  Xint      <- matrix(c(0, beta), byrow = T, ncol = n_cat, nrow = n_Obs)
  ind       <- cbind(c(1:n_Obs), Obs)
  Xby       <- Xint[ind]
  Xint      <- exp(Xint)
  iota      <- c(rep(1, (n_cat)))
  denom     <- log(Xint %*% iota)
  return(sum(Xby …
Run Code Online (Sandbox Code Playgroud)

optimization r rcpp

20
推荐指数
3
解决办法
974
查看次数

标签 统计

optimization ×1

r ×1

rcpp ×1