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问题