我正在对一些替代线性回归技术进行比较。
显然,相对于OLS(普通最小二乘法),这些将是基准。
但我只想要一个纯粹的OLS方法,没有预处理数据来发现数据中的病态条件,就像你在使用regress()
时发现的那样。
我曾希望简单地使用经典(XX)^ - 1XY表达式?但是,这需要使用inv()
函数,但在inv()
的MATLAB指南页面中,它建议您在进行最小二乘估计时使用mldivide
,因为它在执行时间方面更优越数值精度。
但是,我担心是否可以使用mldivide
来查找OLS估算值?作为一个操作员,似乎我无法通过调试器中的“踩踏”看到函数正在做什么。
我是否可以假设mldivide
在所有条件下(包括在存在奇异/ i-ll条件矩阵的情况下)会产生与理论OLS相同的答案?
如果不是在没有任何数据预处理的情况下在MATLAB中计算纯OLS答案的最佳方法是什么?
答案 0 :(得分:3)
当系统
A*x = b
超定时,两种算法都提供相同的答案。当系统未确定时,PINV将返回具有最小范数(minx
)的解NORM(x)
。 MLDIVIDE将选择具有最少数量的非零元素的解决方案。
至于mldivide
如何运作,MathWorks also posted a description of how the function operates。
但是,当矩阵mldivide
为方形时,您可能还想查看有关A
与其他方法的讨论的第一部分this answer。
根据矩阵的形状和组成,您可以使用Cholesky分解对称正定,LU分解用于其他方阵,否则使用QR。然后你可以坚持分解并使用linsolve
基本上只为你进行反向替换。
当mldivide
不是方形(过度指定)或方形而是单数时,pinv
是否优于A
,the two options will give you two of the infinitely many solutions。根据这些文档,两种解决方案都将为您提供准确的解决方案:
这两个都是确切的解决方案,因为
norm(A*x-b)
和norm(A*y-b)
处于舍入错误的顺序。
答案 1 :(得分:1)
根据the help page pinv
为方程组提供最小二乘解,因此要解决系统Ax=b
,只需执行x=pinv(A)*b
。