3

我正在比较一些替代的线性回归技术。

显然,这些将相对于 OLS(普通最小二乘法)进行基准测试。

但我只想要一个纯 OLS 方法,不需要对数据进行预处理来发现数据中的病态,就像您在使用regress().

我曾希望简单地使用经典的 (XX)^-1XY 表达式?然而,这将需要使用该inv()函数,但在 MATLAB 指南页面中,inv()它建议您mldivide在进行最小二乘估计时使用,因为它在执行时间和数值精度方面具有优势。

但是,我担心是否可以使用mldivide查找 OLS 估计值?作为一名操作员,我似乎无法通过调试器中的“介入”来查看该功能正在做什么。

我可以假设mldivide在所有条件下(包括在存在奇异/i-ll 条件矩阵的情况下)都会产生与理论 OLS 相同的答案吗?

如果不是,在 MATLAB 中计算纯 OLS 答案而不对数据进行任何预处理的最佳方法是什么?

4

2 回答 2

3

简短的回答是:

当系统A*x = b超定时,两种算法都提供相同的答案。当系统不确定时,PINV 将返回x具有最小范数 (min NORM(x)) 的解 。MLDIVIDE 将选择非零元素数量最少的解决方案。

至于如何mldivide工作,MathWorks 还发布了该函数如何工作的说明

但是,您可能还想看一下这个答案,以了解关于矩阵为正方形mldivide时与其他方法的讨论的第一部分。A

根据矩阵的形状和组成,您可以将 Cholesky 分解用于对称正定矩阵,将 LU 分解用于其他方阵或 QR。然后你可以坚持分解并使用linsolve基本上只是为你做反向替换。

至于是否mldivide优于pinvwhen Ais not square (overspecified) 或 is square but singles,这两个选项将为您提供无限多个解决方案中的两个。根据这些文档,这两种解决方案都会为您提供确切的解决方案:

从某种意义上说,这两个都是精确的解决方案,norm(A*x-b)并且norm(A*y-b)都在舍入误差的量级上。

于 2013-10-31T23:01:23.830 回答
1

根据帮助页面 pinv给出了方程组的最小二乘解,因此要求解该系统Ax=b,只需执行x=pinv(A)*b.

于 2013-10-31T21:52:51.263 回答