gpt4 book ai didi

python - 为什么在线性回归中创建矩阵的逆时,numpy.linalg.pinv() 优于 numpy.linalg.inv()

转载 作者:行者123 更新时间:2023-12-01 22:34:17 44 4
gpt4 key购买 nike

如果我们想通过使用正规方程来搜索线性回归模型的最佳参数 theta:

theta = inv(X^T * X) * X^T * y

第一步是计算 inv(X^T*X)。因此 numpy 提供 np.linalg.inv()np.linalg.pinv()

尽管这会导致不同的结果:

X=np.matrix([[1,2104,5,1,45],[1,1416,3,2,40],[1,1534,3,2,30],[1,852,2,1,36]])
y=np.matrix([[460],[232],[315],[178]])

XT=X.T
XTX=XT@X

pinv=np.linalg.pinv(XTX)
theta_pinv=(pinv@XT)@y
print(theta_pinv)

[[188.40031946]
[ 0.3866255 ]
[-56.13824955]
[-92.9672536 ]
[ -3.73781915]]

inv=np.linalg.inv(XTX)
theta_inv=(inv@XT)@y
print(theta_inv)

[[-648.7890625 ]
[ 0.79418945]
[-110.09375 ]
[ -74.0703125 ]
[ -3.69091797]]

第一个输出,即 pinv 的输出是正确的,并且在 numpy.linalg.pinv() 中另外推荐。文档。但这是为什么,inv() 和 pinv() 之间的差异/优点/缺点在哪里。

最佳答案

如果矩阵的行列式为零,则它将没有逆矩阵,并且您的 inv 函数将不起作用。如果您的矩阵是奇异的,通常会发生这种情况。

但是pinv会的。这是因为 pinv 在可用时返回矩阵的逆矩阵,在不可用时返回伪逆矩阵。

函数的不同结果是由于浮点运算中的舍入误差

您可以阅读有关伪逆如何工作的更多信息 here

关于python - 为什么在线性回归中创建矩阵的逆时,numpy.linalg.pinv() 优于 numpy.linalg.inv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49357417/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com