未指定method参数时,R语言optim函数默认使用哪种优化算法?
R中optim函数未指定method参数时的默认算法
当调用R语言的optim()函数但不指定method参数时,默认算法会根据优化参数的维度自动选择:
- 若优化参数是一维向量(
par长度为1),默认使用Brent方法,这是一种结合黄金分割搜索与抛物线插值的单变量优化算法,无需梯度信息。 - 若优化参数是多维向量(
par长度≥2),默认使用Nelder-Mead方法,这是一种无导数的单纯形优化算法,适合无法计算目标函数梯度的场景,鲁棒性较强。
你提供的代码示例中,par = c(0, 1)是二维参数向量,因此这段代码里的optim()调用默认使用的是Nelder-Mead算法。
代码示例
set.seed(93420) # 创建随机数据 x <- rnorm(500) y <- rnorm(500) + 0.7 * x data <- data.frame(x, y) head(data) # 打印数据前几行 # x y # 1 -0.21492991 -0.06814474 # 2 -0.02217756 -0.84956484 # 3 0.55175788 0.11247758 # 4 -0.33581492 -0.86346317 # 5 -0.02489514 0.44307381 # 6 -1.44784931 -2.49701457 my_function <- function(data, par) { # 自定义残差平方和函数 with(data, sum((par[1] + par[2] * x - y)^2)) } optim_output <- optim(par = c(0, 1), # 调用optim函数 fn = my_function, data = data)
这段代码通过生成模拟线性回归数据,调用optim()最小化自定义残差平方和函数,实现了线性回归的参数估计。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

