【问题标题】:Is mldivide always the same as OLS in MATLAB?mldivide 是否始终与 MATLAB 中的 OLS 相同?
【发布时间】:2013-11-11 16:58:15
【问题描述】:

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

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

但我只想要一个纯粹的 OLS 方法,而不像使用 regress() 时那样对数据进行预处理以发现数据中的病态。

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

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

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

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

【问题讨论】:

    标签: matlab statistics least-squares


    【解决方案1】:

    The short answer 是:

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

    至于mldivide 的工作原理,MathWorks also posted a description of how the function operates

    但是,当矩阵 A 为正方形时,您可能还想查看 this answer 以了解有关 mldivide 与其他方法的讨论的第一部分。

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

    A 不是正方形(过度指定)或者是正方形但单数时,mldivide 是否比 pinv 更可取,the two options will give you two of the infinitely many solutions。根据这些文档,这两种解决方案都会为您提供准确的解决方案:

    norm(A*x-b)norm(A*y-b) 的角度来看,这两个都是精确解。

    【讨论】:

    • 伪代码测试矩阵是否对称正定,在这种情况下它使用cholesky和for/backward替换,对于一般的方阵使用LU分解和相同的for/backward替换。你知道当系统精确确定时它使用哪种方法吗?这并不明确,因为在完美的多重共线性的情况下,你有一个事实上的超定系统。在显示的伪代码中没有对矩阵条件的测试? (加上使用“\”是\运算符的描述是循环逻辑但我想我知道它们的意思)
    • @Bazman 差点忘了这个答案,抱歉。肯定的不意味着完全确定吗?顺便说一句,chol 有第二个排名输出,所以它可能只是先尝试​​一下。无论如何,我也意识到我需要至少用 LU 替换案例来更新我的其他帖子。谢谢。 linsolve 的好处是您可以告诉它矩阵的形式,因此在输入预分解矩阵时它很有效。 MathWorks 应该使用它而不是循环使用。
    【解决方案2】:

    根据the help pagepinv 给出方程组的最小二乘解,因此要求解系统Ax=b,只需执行x=pinv(A)*b

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多