具有死区线性损耗功能的快速/高效计算

时间:2017-06-16 00:24:53

标签: algorithm optimization mathematical-optimization minimization

我对使用分段线性的损失函数建模数据感兴趣。

对于任何不熟悉的人来说,死区线性损失函数就像从某些点开始的线性L1损失。例如,如果我有点lowerBound和upperBound,并且如果我的函数输出,f(x)落在这些值之间,它的误差为零,并且在此范围之外,误差线性地传播(f(x) - upperBound或lowerBound - f(x))。

这非常接近我的精神损失功能 - 特别是有几个边界(与我的设备中的真实边界相关),在此之外我开始线性关注。在他们里面,我真的不在乎。

我的数据是在每个时间点从设备实时产生的几百个输出,我需要快速计算这个估算器。对于一些X * beta = Y,我的Y通常是几百,我的beta是十二或二(取决于实验)。速度是非常重要的考虑因素。因此,由于其(XT * X)^ - 1 * XT * Y的闭合形式估计,我通过最小二乘法对此进行建模。但是,我觉得解决方案有时无法与我想要的输出对齐(并且更接近这个死区线性损耗输出)。

是否有快速算法或计算技巧才能更接近这个最佳状态?我能想象的最好的解决方案是线性程序,但是,我对它们的使用和比较速度没有太多经验。任何技巧,指导,可能的方法或近似值将不胜感激。谢谢!

编辑:与时间点(时间t的X和Y)相关的每组观察结果与先前的运行(不是t的时间)不同。我只提到这一点,强调我需要多次运行算法。

1 个答案:

答案 0 :(得分:1)

首先,考虑abs(x - a)+ abs(x - b)的导数。对于x< min(a,b)为-2,对于x> max(a,b)它是+2,而对于< = x< = b它是零 - 所以你的分段线性罚分是两个绝对函数(或两个L1范数)的总和。

因此,值得研究一下致力于最大限度地减少偏离L1范数的大量工作 - 例如https://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares。事实上,我认为你可以采用算法进行L1规范的交互式重新加权最小二乘最小化,并修改它来处理你的死区函数,而不是将每个死区函数明确地转换成两个绝对函数。