如果在我无法找到的某个地方找到了答案,请随时发表论文。
我希望在N-1矩阵中计算N×M矩阵和一组已知的地面实数解的最小二乘线性回归。从那里,我想得到每个回归的斜率,截距和剩余价值。基本的想法是,我知道应该为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文档和'net'周围,我只找到了一次计算一列的示例。我曾经认为numpy能够使用标准
计算集合中每列的回归np.linalg.lstsq(arrayA,arrayB)
但是返回错误
ValueError: array dimensions must agree except for d_0
我是否需要将列拆分为自己的数组,然后一次计算一个? 我需要使用参数或矩阵运算来让numpy独立计算每列的回归吗?
我觉得它应该更简单?我看了一遍,我似乎找不到任何人做类似的事情。
答案 0 :(得分: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)
答案 1 :(得分:0)
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