对于最小二乘优化问题的求解,笔者在本次实验中对比分析了以下几种求解思路:
1、用正规方程法求解最小二乘问题:运算量最小,而且简单直观,但由于A^T * A的条件数是A的条件数的平方,因此对于病态情形(即A的条件数比较大),不建议使用该方法。
2、用正规方程QR分解来求最小二乘问题:通常QR算法比较稳定,是求解最小二乘问题的首选方法,特别是当A条件数较大(病态)时。但由于此方法需要使用QR分解,所以只适用于列向量无关的矩阵。若对列向量有关的矩阵求解会出现无效结果。正规方程法所要求的矩阵A列向量线性无关,在实际中几乎无法满足。所以不适合把此方法应用到实际问题中。另外,在实际求解过程中,一般无需获得准确解,所以可以使用梯度下降法求得近似解。
3、梯度下降法求解最小二乘问题:当threshold的值大于1.00E-16后,算法的性能不再提升,此时的迭代次数为2837,残差向量值为1.37780850876571,梯度和正规残差向量之差为9.48E-14,算法性能已接近准确解。
因此,对比分析,可以得出以下结论:
当矩阵A的列向量线性相关时,梯度下降法是更优的选择;当矩阵A的列向量线性无关时,因为正规方程QR分解相对于梯度下降法的复杂度更低,正规方程QR分解是更优的选择。
思维导图如下:
源文件可以在笔者的[Github下载]
├── GD_code.m
├── LS_code.m
├── Matlab实现最小二乘法优化模型(正规方程&梯度下降法).pdf
└── Matrix_A_b.mat