【发布时间】:2018-08-27 02:56:26
【问题描述】:
我有以下 X 和 y 矩阵:
我想使用正规方程方法计算线性回归方程的最佳值:
theta = inv(X^T * X) * X^T * y
theta 的结果应该是:[188.400,0.3866,-56.128,-92.967,-3.737]
我执行以下步骤:
X=np.matrix([[1,1,1,1],[2104,1416,1534,852],[5,3,3,2],[1,2,2,1],[45,41,30,36]])
y=np.matrix([460,232,315,178])
XT=np.transpose(X)
XTX=XT.dot(X)
inv=np.linalg.inv(XTX)
inv_XT=inv.dot(XT)
theta=inv_XT.dot(y)
print(theta)
但我没有得到想要的结果。相反,它会抛出一个错误:
Traceback(最近一次调用最后一次):文件“C:/”,第 19 行,in theta=inv_XT.dot(y) ValueError: 形状 (4,5) 和 (1,4) 未对齐: 5 (dim 1) != 1 (dim 0)
我做错了什么?
【问题讨论】:
-
我建议不要使用 np.inv ,因为它会显式计算矩阵的逆。这比简单地求解线性系统和直接计算 (X'X)^{-1}X' 在数值上更不稳定。为此,请编写 np.linalg.solve(XTX, X) (在确保 XTX 实际上是 X'X 而不是 XX' 就像 MaxU 提到的你计算的那样)。
标签: python numpy machine-learning linear-regression