假设我们有形状为(2,5)的X和形状为(2,)的
y
这有效: np.linalg.lstsq(X, y)
我们希望只有在X的形状为(N,5)且N> = 5的情况下,此方法才起作用。
我们确实获得了预期的5倍权重,但是该问题如何解决?
就像我们有2个方程和5个未知数吗?
numpy如何解决这个问题?
它必须执行类似插值的操作才能创建更多的人工方程式吗?
假设我们有形状为(2,5)的X和形状为(2,)的
y
这有效: np.linalg.lstsq(X, y)
我们希望只有在X的形状为(N,5)且N> = 5的情况下,此方法才起作用。
我们确实获得了预期的5倍权重,但是该问题如何解决?
就像我们有2个方程和5个未知数吗?
numpy如何解决这个问题?
它必须执行类似插值的操作才能创建更多的人工方程式吗?
Answers:
我的理解是numpy.linalg.lstsq依赖于LAPACK例程dgelsd。
问题是要解决:
当然,对于秩小于向量长度的矩阵A ,这没有唯一的解决方案。对于不确定的系统,请提供解决方案:dgelsd
例如,如果system为,则numpy.linalg.lstsq将返回。
该例程dgelsd
计算A的奇异值分解(SVD)。
我将概述使用SVD求解线性系统背后的想法。奇异值分解是因式分解,其中和是正交矩阵,是对角矩阵,其中对角项称为奇异值。
矩阵的有效等级将是奇异值的数量,这些奇异值实际上不为零(即,相对于机器精度而言,其与零之间的差异足够大...)。令为非零奇异值的对角矩阵。因此,SVD为:
的伪逆由下式给出:
考虑解。然后:
这里基本上有两种情况:
最后一部分有点棘手...需要跟踪矩阵尺寸并使用是正交矩阵。
当具有线性独立的行时(例如,我们有一个胖矩阵),则:
对于不确定的系统,您可以证明伪逆为您提供了最小范数解。
当具有线性独立的列时(例如,我们有一个瘦矩阵),则:
lm
默认使用QR因式分解,但您可以指定替代方法。