Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R optim()的高维优化方案_R_Mathematical Optimization_Nonlinear Optimization - Fatal编程技术网

R optim()的高维优化方案

R optim()的高维优化方案,r,mathematical-optimization,nonlinear-optimization,R,Mathematical Optimization,Nonlinear Optimization,我已经使用一个非标准(分段线性)成本函数为optim实现了一个包装函数,并针对该成本函数进行了优化。(考虑lm,但成本函数最小二乘被自定义函数替换。) 此过程对于低维模拟数据非常有效。但是,我的数据(不幸的是我无法共享)是相对高维的(大约100列,没有常量列) 使用此高维数据,优化参数与其初始值相差约0.001(或多或少取决于所使用的方法),即使使用参数control=list(maxit=5000)并尝试所有实施的优化方法s: optim(par=c(平均值(b),rep(0,ncol(A)-

我已经使用一个非标准(分段线性)成本函数为
optim
实现了一个包装函数,并针对该成本函数进行了优化。(考虑
lm
,但成本函数最小二乘被自定义函数替换。)

此过程对于低维模拟数据非常有效。但是,我的数据(不幸的是我无法共享)是相对高维的(大约100列,没有常量列)

使用此高维数据,优化参数与其初始值相差约0.001(或多或少取决于所使用的方法),即使使用参数
control=list(maxit=5000)
并尝试所有实施的优化
方法
s:

optim(par=c(平均值(b),rep(0,ncol(A)-1)),fn=costFn,A=A,b=b,method=“CG”,control=list(maxit=5000))
这里,
A
是预测因子矩阵,
b
是因变量,
costFn
定义为

costFn <- function(A, par, b) {
    sum(
      wPlus * pmax(A %*% par - b, 0)
      + wMinus * pmax(b - A %*% par, 0)
    )
  }
costFn 0

我觉得这个过程结束得太快,无法进行5000次迭代(<2秒)

被视为函数R->R的成本函数是凸函数,输入是预测因子和因变量的线性组合,因此它也应该被视为函数R^n->R的凸函数。因此,这些方法应该收敛到全局最小值(而不是陷入局部最小值,因为没有其他方法)。如果我错了,请纠正我

我的问题是,我是否犯了一个明显的错误(我知道,这很难说,因为我无法提供reprex),或者是否有更好的替代方法来替代
optim

可能的错误包括:

  • 成本函数实际上是非凸的,因此算法不会收敛到全局最小值
  • 由于数据是高维的,因此可能需要多次迭代。也许我没有正确使用
    maxit
    参数
  • 所实现的方法不适用于高维数据

这是不可微的,因此您可以预期基于梯度的局部NLP解算器会遇到麻烦。然而,您得到的是L1范数或LAD回归的一个轻微概括:

 min sum(k, |r[k]|)
 r = Ax - b 
 r, x free variables 
这基本上是您在
wPlus=wMinus=1
中遇到的问题。该L1问题可表述为线性规划(LP)模型,如下所示:

min sum(k, rPlus[k] + rMin[k])
rPlus - rMin = Ax - b
rPlus[k],rMin[k]>=0
x free variable
在R下使用的LP解算器随时可用

我们在这里使用的建模技术称为变量拆分。在最佳解决方案中,每对
(rPlus[k],rMin[k])
中只有一个非零

我们可以通过稍微调整一下目标,将此公式用于解决您的问题:

min sum(k, wPlus*rPlus[k] + wMin*rMin[k])
rPlus - rMin = Ax - b
rPlus[k],rMin[k]>=0
x free variable

使用一个好的LP解算器可以非常有效地解决具有多变量和多约束的LP问题。

这是不可微的,因此您可以预期基于梯度的局部NLP解算器会遇到麻烦。然而,您得到的是L1范数或LAD回归的一个轻微概括:

 min sum(k, |r[k]|)
 r = Ax - b 
 r, x free variables 
这基本上是您在
wPlus=wMinus=1
中遇到的问题。该L1问题可表述为线性规划(LP)模型,如下所示:

min sum(k, rPlus[k] + rMin[k])
rPlus - rMin = Ax - b
rPlus[k],rMin[k]>=0
x free variable
在R下使用的LP解算器随时可用

我们在这里使用的建模技术称为变量拆分。在最佳解决方案中,每对
(rPlus[k],rMin[k])
中只有一个非零

我们可以通过稍微调整一下目标,将此公式用于解决您的问题:

min sum(k, wPlus*rPlus[k] + wMin*rMin[k])
rPlus - rMin = Ax - b
rPlus[k],rMin[k]>=0
x free variable
使用一个好的LP求解器可以非常有效地解决具有多变量和多约束的LP问题