首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用optim求函数最大值时,Hessian是-1 * Hessian

当使用optim求函数最大值时,Hessian是-1 * Hessian
EN

Stack Overflow用户
提问于 2015-10-04 07:56:22
回答 1查看 79关注 0票数 0

我想找出函数的最大值:

代码语言:javascript
复制
Fd <- 224 * d1 + 84 * d2 + d1 * d2 - 2 * d1^2 - d2^2

我可以使用下面的代码使用‘穷举’搜索来做到这一点:

代码语言:javascript
复制
my.data <- expand.grid(x1 = seq(0, 200, 1), x2 = seq(0, 200, 1))

d1 <- my.data[,1]
d2 <- my.data[,2]
Fd <- 224 * d1 + 84 * d2 + d1 * d2 - 2 * d1^2 - d2^2

new.data <- data.frame(Fd = Fd, d1 = d1, d2 = d2)

# identify values of d1 and d2 that maximize Fd
new.data[new.data$Fd == max(new.data$Fd),]
#          Fd d1 d2
# 16157 11872 76 80

d1 = 76d2 = 80时,该函数的最大值为11872

我还可以使用optim找到最大值,代码如下:

代码语言:javascript
复制
Fd <- function(betas) {
     b1 = betas[1]
     b2 = betas[2]
     -1 * (224 * b1 + 84 * b2 + b1 * b2 - 2 * b1^2 - b2^2)
}

optim(c(1,1), Fd, hessian = TRUE)

我将上面的函数乘以-1以获得最大值,并注意到此代码返回的最大值是真实最大值的负值。此外,此代码返回的Hessian是真正的Hessian * -1:

代码语言:javascript
复制
true.hessian <- matrix(c(-4, 1, 1, -2), nrow = 2, byrow = TRUE)
true.hessian

estimated.hessian <- -1 * true.hessian
estimated.hessian

我直到现在才意识到这一点,也没有在optim页面上看到这一点。我应该担心吗?如果是,在什么情况下?

在寻找最大值时,optim语句中是否有一个选项可以返回原始函数的真Hessian,而不是-1 *原始函数?或者我应该意识到,当我自己搜索最大值(而不是最小值)并更正Hessian时,Hessian是乘以-1的?

EN

回答 1

Stack Overflow用户

发布于 2015-10-04 08:04:21

这将在最大化函数时返回正确的Hessian:

代码语言:javascript
复制
Fd <- function(betas) {

     b1 = betas[1]
     b2 = betas[2]

     (224 * b1 + 84 * b2 + b1 * b2 - 2 * b1^2 - b2^2)

}

optim(c(1,1), Fd, control=list(fnscale=-1), hessian = TRUE)

# $par
# [1] 76.00046 79.99999
#
# $value
# [1] 11872
#
# $counts
# function gradient 
#      129       NA 
#
# $convergence
# [1] 0
#
# $message
# NULL
#
# $hessian
#           [,1]      [,2]
# [1,] -3.999998  0.999999
# [2,]  0.999999 -2.000000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32928693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档