【问题标题】:Questions about the optimization in R关于 R 中优化的问题
【发布时间】:2020-07-18 14:46:57
【问题描述】:

以下代码是我们的老师在实践课中介绍的。我对使用函数 optim() 的优化步骤中代码的最后一行有疑问,但我添加了其他行以澄清工作。

population <- read.csv("data.csv", header=FALSE, sep=';', dec=',')

数据看起来像:

1      8.29

2      5.37

3      10.61

4      5.92

5      14.99

6      9.74

7      15.47
    .
    .
    .

我们从总体中抽取 100 个元素作为

Sampled_Data <- sample(population$V1, 100) 

然后我们编写一个函数来计算采样元素的“对数正态分布”的可能性

MyFunc <- function(Myparameters,data){
      Firstparameter <- Myparameters[1]
      Secondparameter <- Myparameters[2] 
      n <- length(data)
      Mydistribution <- -n/2*log(2*pi*(Secondparameter^2)) - sum(log(data)) - (1/(2*Secondparameter^2))*sum((log(data)-Firstparameter)^2) 
      return(Mydistribution) 
    }

最后我们用函数optim()用似然极大函数估计分布的两个参数

optimisation <- optim(c(1,1),MyFunc,data=Sampled_Data)

在函数optim() 中,我不明白为什么他添加了向量c(1,1),而从文档中,我们应该用参数的初始值填充它?他是否假设初始值为 1 & 1 ?如果是这样,基于我们假设的初始值。

另外,为什么他添加了data=Sampled_Data 而文档中没有类似的东西?从文档中可以看出,在添加函数之后,我们应该添加其他的东西,比如梯度、方法和边界!但不是我们拥有的数据!

最后,如果我想指定下限和上限,我不清楚在对数正态分布的情况下使用哪些值。

我不知道在哪里发布问题,在这里或交叉验证,但我在这里看到了类似的问题。无论如何,如果不是合适的地方我会删除问题。

【问题讨论】:

  • 基于这些短语:“我不明白他为什么 [...]”、“他是否假设”、“另外,他为什么添加 [...]”;看来您的讲师是男性,并且可能是回答您有关他为什么要为此作业采取某些行动的问题的最佳人选。
  • @JohnH 很遗憾他在国外,我们无法联系或联系到他!

标签: r optimization statistics


【解决方案1】:

R 中函数的未命名参数按照它们在定义中出现的顺序分配。

如果我们通过help(optim) 寻求帮助:

Usage
optim(par, fn, gr = NULL, ...,
      method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
                 "Brent"),
      lower = -Inf, upper = Inf,
      control = list(), hessian = FALSE)

我们将看到默认情况下第一个参数是par。因此,您的导师设置了par = c(1,1)fn = MyFun 是正确的。您还将在help(optim) 中看到您也可以设置upper =lower = 参数。

如果你回顾MyFun的定义,你会看到第一个参数是Myparameters。因此,当调用optim 时,c(1,1) 作为其第一个参数传递给MyFun。因此,在初始步骤中,FirstparameterSecondparameter 都将设置为 1

最后,如果你仔细看help(optim)

Usage
optim(par, fn, gr = NULL, ...,
      method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
                 "Brent"),
      lower = -Inf, upper = Inf,
      control = list(), hessian = FALSE)

Arguments
par Initial values for the parameters to be optimized over.

fn  A function to be minimized (or maximized), with first argument the vector of parameters over which minimization is to take place. It should return a scalar result.

gr  A function to return the gradient for the "BFGS", "CG" and "L-BFGS-B" methods. If it is NULL, a finite-difference approximation will be used.

... Further arguments to be passed to fn and gr.

您将看到... 可以作为进一步的参数传递给fn,从而传递给MyFun。在这种情况下,data=Sampled_Data

【讨论】:

  • 第二个问题呢?为什么他在函数后面加了data=Sampled_Data
  • 非常感谢您的努力。所以我们需要添加data=...,因为它在优化过程中具有数学效果,或者因为函数MyFun包含两个参数,所以当我们需要传递它们以在优化过程中正确定义函数时。此外,对于初始步骤中的参数值,我们总是随机定义它们还是根据数学工作来定义它们?
  • 您需要data=Sampled_Data,因为您正在调用MyFun,它具有并使用了一个没有默认值的参数data=
猜你喜欢
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多