【问题标题】:visualizing the optimization path till convergence in R可视化优化路径直到在 R 中收敛
【发布时间】:2019-11-09 20:52:24
【问题描述】:

我正在使用“优化”包来最大化对数似然函数。我想可视化优化路径,直到与动画收敛,例如这个图:下面的链接。

https://florarblog.files.wordpress.com/2018/08/optimization_path2.gif?w=740&h=507&zoom=2)

这是对数似然函数和优化:

  x = runif(500)
  x = model.matrix( ~ x)
  y = rbinom(500,1,0.5)
  theta= c(-0.1,2)

  logll <- function(theta)
    {
    p <- exp(x%*%theta) 
    p[p >=1] <- 1- 1e-5 ; p[p<=0] <- 1e-5 
    LL <- sum(y*log(p) + (1-y)*log(1 - p))
    return(-LL)
    }

  optim(theta,logll)

  l.grid <- 200
  grid.b <- as.matrix(expand.grid(b0=seq(-3,0.5,length.out=l.grid), b1=seq(-6,6,length.out=l.grid)))
  grid.f <-apply(grid.b,1,logll)
  grid.b <- as.data.frame(grid.b)
  contourplot(grid.f~b0+b1,data=grid.b,cuts=15)

提前感谢您的帮助

【问题讨论】:

  • 无法运行您的代码:Error in optim(theta, logll) : function cannot be evaluated at initial parameters In addition: Warning message: In log(1 - p) : NaNs produced
  • 我编辑了它,它现在可以工作了。谢谢你的回答

标签: r optimization


【解决方案1】:

我们需要一次一步运行优化器,因此我们得到每个时间步的解决方案。然后使用gganimate 制作动画几乎是微不足道的。

grid.b$f <- grid.f

op <- sapply(
  seq_len(optim(theta,logll)$counts['function']), 
  function(i) { 
    set.seed(1234)
    optim(theta, logll, control = list(maxit = i))$par
  }
)
op_df <- data.frame(b0 = op[1,], b1 = op[2,])
op_df$step <- 1:nrow(op_df)

p <- ggplot(grid.b, aes(b0, b1)) + 
  geom_raster(aes(fill = f)) +
  geom_contour(aes(z = f), col = 'grey40') +
  geom_path(data = op_df, col = 'white') +
  geom_point(data = op_df, col = 'white') +
  scale_fill_viridis_c() +
  coord_cartesian(expand = FALSE)


library(gganimate)
a <- p + transition_reveal(step)

anim_save(
  '~/Desktop/anim.gif', a, height = 400, width = 400, 
  nframes = nrow(op_df), fps = 30, duration = nrow(op_df) / 30
)

一帧是一步。您可以平滑过渡,但离散的性质提供了丰富的信息。

【讨论】:

  • 哇!做得好!这可以为 R 中的任何优化函数完成吗?
  • 只要你能定义迭代次数并设置种子,可能是的。
  • 我试着做一个类似的例子,但我遇到了一些困难。如果你有时间,你能看看这个吗? stackoverflow.com/questions/68309964/…谢谢
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多