首页 > 解决方案 > 仅使用 numpy 的多元多元线性回归

问题描述

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

谢谢

标签: pythonoptimizationregressionlinear-regression

解决方案


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

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

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

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


推荐阅读