在普通的递推最小二乘算法中,随着数据的不断到来,显然矩阵中的元素会变得越来越大,而矩阵作为的逆矩阵,则会逐渐趋于零,这时,模型将无法继续更新或者更新极其缓慢,这就是数据饱和现象。我们也可以更加直观的理解为,由于过去累加了很多的数据,当前到来的数据与之前累加的数据相比就如一滴水掉落到大海,不会惊起任何波澜。针对数据饱和问题,其中一个解决方案就是带遗忘因子的递推最小二乘法。
假设有数据,其中,,为样本数,为特征数,考虑最小二乘解
当新数据到来时,更新模型。我们希望当前的数据对于回归结果更加重要,而过去数据的重要性随着时间的回溯依次降低,从而使得模型能够更好的适应当前数据的变化,克服数据饱和问题。为了达到上述目的,我们可以给之前数据的损失乘以一个权重 ,即
于是得到新的回归系数
其中
根据公式(4)的结果,通过归纳可得
从公式(6)可以很容易看出,这是一个典型的套娃行为,当前的权重为1,上一次的权重为 ,通过一次套娃 ,我们发现上上次的权重变成了,依次类推,最终我们发现随着时间的回溯,越久的数据权重会越来越低并逐渐趋于0。
将公式(7)回带到公式(3):
根据公式(8)的结果,通过归纳可得
到这里,已经能够实现对遗忘因子最小二乘的递推,其过程可概括如下,我们称为算法1:
- 根据公式(5)更新;
- 根据公式(9)更新。
但以上过程存在一个问题:
- 对矩阵的求逆计算复杂度比较高,我们能否在递推过程中避免对的求逆计算,而直接更新它的逆矩阵;
针对以上问题,我们要对公式进一步改造
根据Sherman-Morrison-Woodbury公式:
公式(6)的逆可写成如下形式
令,公式(10)变为:
公式(9)变为:
注意到,公式(11)依然存在对 的求逆运算,这似乎依然没有解决上述问题1,我们避免了对 的求逆,但却又引入了一个新的逆。事实上,如果数据是逐个到达的,则 为一个行向量(在本文中,一个样本我们用行向量表示,这主要是因为本文规定数据矩阵中每一行代表一个样本),因此 最终得到结果为一个数值,我们无需矩阵求逆计算,只需要取它的倒数就好了,即
于是我们得到了新的递推算法如下,我们称为算法2:
- 根据公式(13)更新
- 根据公式(12)更新 。
一些书上的递推算法可能并非这样的形式,我们可以进一步对上述过程进行一些整理。在一些书中,也被称为增益,被称为新息,顾名思义,就是引入的新信息。
将公式(14)的结果代入到公式(11)可得
于是,算法2可进一步的写为如下形式,我们称为算法3:
- 根据公式(14)更新模型增益 ;
- 根据公式(15)更新 ;
- 更新回归系数
文章出处登录后可见!