前面提到的多项式拟合方法都是有n个数据点,这个多项式就是n-1阶。就像下面这个链接里的“例子2:多项式插值”,求解Ab=y。此时A是一个可逆方阵。
YcoFlegs:[数值计算] 条件数zhuanlan.zhihu.com
1. Over-constrained System
但是如果已知数据存在误差,那么如果精确拟合反而会overfitting。此时可以刻意选择一个更小的多项式阶数,如果就用最简单的monomial basis的话,需要求解的问题变成
其中
是已知数据的input x,
是参数向量,
是已知数据的output。
定义残差residual为
一种非常有效的优化方法是,最小二乘法:找到一组参数b,使得
最小,具体形式为:
最后第二行中间两项相等,是因为
,而且这个计算结果是个有理数
。
注意,此处因为
是b的二次函数,而且非负,所以必然存在最小值。但不一定是唯一解,比如
,与
无关。
最小化
等价于梯度为零
这组方程叫正规方程组 Normal equations
其中
奇异 当且仅当
是非满秩 rank-deficient矩阵(即,不是所有的列都是线性独立的)
在线性代数中,一个矩阵A 的列秩是 A 的线性无关的纵列的极大数目。类似地,行秩是 A 的线性无关的横行的极大数目。矩阵的列秩和行秩总是相等的,因此它们可以简单地称作矩阵 A 的秩。
wikipedia 秩 (线性代数)
因此理论上最后一步只需要把正规方程组左边的
移到等式右侧,即:
其中
被称为是 伪逆 Pseudoinverse,记作
这里有一个例子:
用11阶的多项式拟合50个samples的
(代码)
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
其中least sq.是调用np的库的结果,normal是用正则方程组求解的结果。
理论很美好,在小数据量的时候没问题,然而直接使用正规方程组求解会在数据量大(e.g. data size > 100)的时候不稳定numerically unstable。原因是 需要对
求逆,而A我们都知道是Vandermonde矩阵的一部分,本身就是poorly conditioned,而
只会更糟糕。解决的方法是使用QR分解,这也是Python MATLAB求解
线性最小二乘 问题的方法。
对动手操作感兴趣的可以看下这个作业题的第五题:
AM205: Assignment 1iacs-courses.seas.harvard.edu
题目大意是用三张不正常的图片去拟合一个线性模型,组合成右下角那个正常的图片。比较有趣的一点是,这里的A矩阵是一个3阶张量,而不是上面推导中的矩阵,因为图片有RGB 3层。但做起来思路是一样的,只不过把矩阵点乘和转置 换成 张量的点乘和转置。
2. Underdetermined System
和数据量大于参数量的情况相反,另一种情况是,参数量多于数据量,因此已知条件过少。
中的各个矩阵形状如下:
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
同样是求解正规方程组
, 但此时因为此时
,
的rank最大为m(m<n),此时
一定奇异。
一种解决方法是 用拉格朗日乘子,
。注意这个和前面的Eq.4形式有细微的差别。此处的伪逆是
,满足
。因此被称为右逆right inverse,详细可以参考MIT OCW的线代note和video。
Lecture 33: Left and right inverses; pseudoinversocw.mit.edu
另一种简单一点的思路是 加正则项。目标函数现在是
其中
,
依旧是
的套路,此时结果是:
可以通过选择S的形式来满足
可逆。比如取
。
还是以函数
在
区间上为例,取5个点,然后拟合一个11阶的多项式。
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
(拟合效果不错)
(条件数太大了)
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
(拟合效果很差)
(条件数比较小)
- :对高阶项的系数更多的惩罚
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
(拟合效果很差)
(条件数也比较大小)
- 拉格朗日乘子(突然冒出来)说,其实它的效果更好:
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/