optim的高维优化替代方案

问题描述

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

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

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

method 这里optim(par = c(mean(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) ) } wPlus> 0。

我觉得此过程终止的速度太快,无法进行5000次迭代(

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

我的问题是,我是否似乎犯了一个明显的错误(由于我无法提供代表,所以我很难知道这个错误),或者是否有wMinus以外的替代方法

可能的错误包括

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

解决方法

这是不可微的,因此您可以期望基于梯度的局部NLP求解器会遇到麻烦。但是,您对L1-norm或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求解器。

我们在此处使用的建模技术称为变量拆分 [link]。在最佳解决方案中,每对(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问题。