使用 Numpy 对矩阵进行最小二乘回归

Posted

技术标签:

【中文标题】使用 Numpy 对矩阵进行最小二乘回归【英文标题】:Least-Squares Regression of Matrices with Numpy 【发布时间】:2012-07-10 03:30:11 【问题描述】:

我正在寻找从 N x M 矩阵和一组已知的、真实的解决方案在 N-1 矩阵中计算最小二乘线性回归。从那里,我想得到每个回归的斜率、截距和残值。基本思想是,我知道应该为 N 行中的每个样本预测实际值,并且我想使用残差确定 M 列中的哪一组预测值最准确。

我没有很好地描述矩阵,所以这里是一张图:

(N,M) matrix with predicted values for each row N
 in each column of M...

##NOTE: Values of M and N are not actually 4 and 3, just examples
   4 columns in "M"
  [1, 1.1, 0.8, 1.3]
  [2, 1.9, 2.2, 1.7]  3 rows in "N"
  [3, 3.1, 2.8, 3.3]


(1,N) matrix with actual values of N


  [1]
  [2]   Actual value of each sample N, in a single column
  [3]  

再次,为了清楚起见,我希望计算 (N,M) 矩阵的每一列和 (1,N) 矩阵之间的 lstsq 回归。

例如,之间的回归

[1]   and [1]
[2]       [2]
[3]       [3]

那么之间的回归

[1]   and  [1.1]
[2]        [1.9]
[3]        [3.1]

以此类推,输出计算出的每个回归的斜率、截距和标准误差(平均残差)。

到目前为止,在 numpy/scipy 文档和网络中,我只发现一次计算一列的示例。我原以为 numpy 有能力使用标准计算集合中每一列的回归

np.linalg.lstsq(arrayA,arrayB)

但这会返回错误

ValueError: array dimensions must agree except for d_0

是否需要将列拆分为自己的数组,然后一次计算一个? 我需要使用参数或矩阵运算来让 numpy 独立计算每列的回归吗?

我觉得它应该更简单?我已经看了一遍,似乎找不到任何人在做类似的事情。

【问题讨论】:

你说你的矩阵是 (N,M) (1,N)。 Lstsq期望(N,M)和(N),您是否尝试使用arrayB的转置?我从你那里得到了一个稍微不同的例外(LinAlgError:不兼容的尺寸),我使用的是 Python2.7,带有 numpy1.6 【参考方案1】:

也许你切换了 A 和 b?

以下作品适合我:

A=np.random.rand(4)+np.arange(3)[:,None]
# A is now a (3,4) array
b=np.arange(3)
np.linalg.lstsq(A,b)

【讨论】:

【参考方案2】:

arrayB的第0维必须与arrayA的第0维相同(参考:np.linalg.lstsq的官方文档)。您需要尺寸为 (N, M) and (N, 1)(N, M) and (N) 的矩阵,而不是您现在使用的 (N,M) and (1,N) 矩阵。

请注意,(N, 1)N 维矩阵会给出相同的结果——但数组的形状会不同。

您的例外情况略有不同,但这可能是由于版本不同(我在 Windows 上使用的是 Python 2.7,Numpy 1.6):

>>> A = np.arange(12).reshape(3, 4)
>>> b = np.arange(3).reshape(1, 3)

>>> np.linalg.lstsq(A,b)
# This gives "LinAlgError: Incompatible dimensions" exception

>>> np.linalg.lstsq(A,b.T)
# This works, note that I am using the transpose of b here

【讨论】:

以上是关于使用 Numpy 对矩阵进行最小二乘回归的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘拟合(scipy实现)

numpy.polyfit()方法与Stats.linregress( ) 方法最小二乘近似拟合斜率对比分析

投影矩阵和最小二乘

从最小二乘到岭回归(Ridge Regression)的深刻理解

spss 怎么用最小二乘估计求回归方程

r语言如何最小二乘线性回归分析