Fast/efficient 用死区线性损失函数计算

Fast/efficient computation with deadzone linear loss function

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

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

这非常接近我的心理损失函数——特别是有几个边界(与我的设备中的真实边界相关),在这些边界之外我开始线性地关心。在他们里面,我真的不在乎。

我的数据是实时生成的,每个时间点都有几百个设备输出,我需要快速计算这个估计量。对于一些 X * beta = Y,我的 Y 通常是几百,我的 beta 是十几两个(取决于实验)。速度是一个非常关键的考虑因素。因此,由于 (X.T * X)^-1 * X.T * Y 的封闭形式估计量,我通过最小二乘法对此进行建模。但是,我觉得解决方案有时无法与我想要的输出保持一致(并且更接近这个基于死区线性损失的输出)。

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

编辑:与时间点(时间 t 的 Xs 和 Ys)相关的每组观察结果都不同于之前的 运行s(t 以外的时间)。我提到这个只是为了强调我需要多次 运行 算法。

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

因此,可能值得研究致力于最小化 L1 范数偏差的大量工作 - 例如,https://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares。事实上,我认为您可以采用 L1 范数的交互重新加权最小二乘最小化算法并修改它来处理您的死区函数,而无需将每个死区函数显式转换为两个绝对函数。