递推最小二乘推导(RLS)
主要推导下递推最小二乘,各种版本的符号问题太多,我找到了一个目前看来最清楚的版本的推导,是参考的 Dr Xia Hong的CY3A2 System identification。
最小二乘要解决的问题是
y = \begin{bmatrix}x_1 & \cdots & x_n\end{bmatrix} \begin{bmatrix} \theta_1 \\ \vdots \\ \theta_n \end{bmatrix} 已知x和y的一系列数据,来求出theta的估计。用矩阵的形式来表达更方便一些
\begin{bmatrix}y_1 \\ \vdots \\y_k\end{bmatrix} = \begin{bmatrix}\phi_1^T \\ \vdots \\ \phi_k^T\end{bmatrix} \Theta 其中k代表有k组观测到的数据, \phi_i^T = \begin{bmatrix}x_1^i & \cdots & x_n^i\end{bmatrix} \in \mathbb{R}^{1 \times n}, \Theta = \begin{bmatrix}\theta_1 \\ \vdots \\ \theta_n\end{bmatrix} \in \mathbb{R}^{n\times 1} 表示第i组数据的输入观测量,yi表示第i组数据的输出观测量。令 \Phi_k = \begin{bmatrix}\phi_1^T \\ \vdots \\ \phi_k^T\end{bmatrix} \in \mathbb{R}^{k\times n}, Y_k = \begin{bmatrix}y_1 \\ \vdots \\ y_k\end{bmatrix} \in \mathbb{R}^{k\times 1} ,则最小二乘的解很简单,就是 \hat{\Theta}_k= (\Phi_k^T\Phi_k)^{-1}\Phi_k^T Y_k ,如果数据是在线的不断的过来,不停的采用最小二乘的解法来解是相当消耗资源与内存的,所以要有一种递推的形式来保证对 \hat{\Theta}_k 的在线更新。
而递推的形式最好是 \hat{\Theta}_k = \hat{\Theta}_{k-1} + 修正量 。一定要理解这里的下标k代表的意思,是说在有k组数据情况下的预测,所以k比k-1多了一组数据,所以可以用这多来的一组数据来对原本的估计进行修正,这是一个很直观的理解。下面是推导
先看 \Phi_k^T\Phi_k和\Phi_k^TY_k , 令 P_k^{-1} = \Phi_k^T\Phi_k
好,这两项有了递推形式,再继续推
到这里我们就有了 \hat{\Theta}_k = \hat{\Theta}_{k-1} + 修正量 的形式,注意上面的n是这里的k,这里懒得重新打了。然后总结的算法就是
但是注意第8个式子还是要计算矩阵逆,虽然P的维度是nxn,比较小,n是估计的动力学方程中自变量的个数,但是求逆还是比较复杂,不要着急,有一个定理。
这里推导就完毕了,不用求逆了,很漂亮。