gpt4 book ai didi

r - 在 R 中使用 optim() 或 optimize() 函数

转载 作者:行者123 更新时间:2023-12-04 21:32:05 29 4
gpt4 key购买 nike

我一直在尝试使用 optim()optimize()函数来最小化绝对预测误差的总和。

我有 2 个向量,每个长度为 28,1 个包含预测数据,另一个包含过去 28 天的实际数据。
fcstact向量在这里:-

fcst <- c(3434.23, 3434.23, 3232.4, 1894.63, 1989.23, 3827.71, 3827.71, 3827.71, 3434.23, 1984.42, 1894.63, 1989.23, 3827.71, 3827.71, 3827.71, 3827.71, 3625.88, 2288.11, 1989.23, 3434.23, 3434.23, 3434.23, 3434.23, 3232.4, 2288.11, 2382.71, 3827.71, 3827.71)

act <- c(3194.62, 3109.93, 2991.44, 1741.49, 1935.07, 3100.84, 3169.39, 3170.24, 2613.81, 1947.35, 1820.63, 1765.62, 3397.48, 3501.14, 3444.14, 3589.24, 3263.55, 2153.49, 2159.85, 3237.94, 3345.7, 3246.66, 3195.58, 3001.53, 2073.76, 2419.29, 3530.62, 3455.71)

我创建了一个像这样的目标函数:-
fn <- function(fcst, act, par) {
sum(abs(act - (fcst * par)))}

使用 optimize()功能如下:-
xmin1 <- optimize(fn, c(0.5, 1.5), fcst = fcst, act = act)

我得到了 'par' 的正确值 - 没问题。
> xmin1
$minimum
[1] 0.92235

$objective
[1] 3630.399

但是,当我使用 optim() 时功能如下:-
xmin <- optim(par = c(0.1, 1.9), fn, fcst = fcst, act = act)

我像这样得到 2 个 par 值:-
> xmin
$par
[1] 0.9223822 0.9191707

$value
[1] 3623.823

$counts
function gradient
95 NA

$convergence
[1] 0

$message
NULL

问题是为什么我使用 optim() 为单个参数“par”获得 2 个值功能。我不应该只得到一 (1) 个值,就像我为 optimize() 所做的那样功能?

此外,在任何一种情况下,根据参数的初始值,我得到的参数值的值略有不同 - 当此目标函数基本上是单峰时,这是否取决于初始值?

此致

迪帕克·阿加瓦尔

最佳答案

问题是您正在初始化 par带有 2 个参数的对象和 optim 中的默认优化器所以它认为,出于某种奇怪的原因,它必须解决 2 个参数(这发生在我身上,但我不知道为什么)只需使用 1 个值 en par在函数中输入,你会得到你想要的结果。

xmin <- optim(par = 0.1, fn, fcst = fcst, act = act)

关于r - 在 R 中使用 optim() 或 optimize() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896182/

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