【问题标题】:Multivariate Multiple Linear regression using only numpy仅使用 numpy 的多元多元线性回归
【发布时间】:2020-10-09 07:17:15
【问题描述】:

我希望建立一个包含 N 个因变量和 M 个自变量的多元、多元线性回归模型。我环顾四周,似乎找不到实现。我做了一些研究并在此处找到了一些注释:幻灯片 51 上的 http://users.stat.umn.edu/~helwig/notes/mvlr-Notes.pdf。这似乎很容易实现:

import numpy as np


M = 10
N = 3
p = 15

Y = np.random.rand(p,N)

X = np.random.rand(p,M)

A = np.dot(np.transpose(X),X)
B = np.dot(np.transpose(X),Y)

sol = np.linalg.solve(A,B)

其中 sol 输出系数矩阵。我最终会将其扩展到非常大的数据集。我主要关心的是这种方法的准确性。老实说,这似乎太简单了。有人可以权衡这在多元、多元回归中是否足够,或者是否有一些我可以使用的包或其他更好的东西?

谢谢

【问题讨论】:

    标签: python optimization regression linear-regression


    【解决方案1】:

    幕后发生的事情比你想象的要多。您正在查看的是过度约束线性方程组系统的最小二乘解。让我这样解释。你有p 方程和q 未知。

    案例 1:p < q 无限多的解决方案。大小为p x q 的矩阵A 是奇异的,因此存在无限多个解。它们可以通过寻找零空间的特定解和基础来找到。 np.linalg.solve 不能用于解决这样的系统,因为它只需要满秩方阵。您可以改用np.linalg.lstsq。

    案例 2:p = q 唯一解决方案。这意味着p x q 矩阵是可逆的,您可以使用x = A^(-1) b 求解系统Ax = b。事实上,当你拨打np.linalg.solve 时,这正是正在发生的事情。

    案例 3:p > q 不存在解决方案。但是我们可以通过将向量b正交投影到矩阵A的列空间来进行近似。这意味着我们要找到一个向量b_hat 使得b_hat + w = b 其中w 是垂直于b_hat 的任意向量,而b_hat 位于矩阵A 的列空间中。因此,有一些@ 987654341@ 使得 A * x_hat = b 和 A^(T) w = 0 (因为 w 位于左侧空空间中)。作为w = b - b_hat,我们有A^(T) w = A^(T) * b - A^(T) * ( A * x_hat )。因此,我们找到了一个解决方案,x_hat = (A^(T) * A)^(-1) * A^(T) * b。这个x_hat 是线性方程组p > q 的最佳近似解。它可以在数学上证明,但我认为这是一个合理的解释。同样,np.linalg.solve 不能用于求解这种类型的线性系统,但可以使用另一个例程 np.linalg.lstsq。

    【讨论】:

    • 非常感谢您的及时回复!我的数据最终会产生一个非常大的矩阵,所以我假设 np.linalg.solve 不会显式找到逆矩阵,而是使用 LU 分解正确求解?因此,如果 p > q 将 linalg.solve 替换为 linalg.lstsq 对我来说是安全的吗?
    • 是的! np.linalg.lstsq 可能会更快、更准确,因为它直接包装了 BLAS 最小二乘例程。
    • 完美!非常感谢
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 2014-02-20
    • 2019-01-30
    • 2010-11-23
    • 1970-01-01
    • 2013-07-17
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多