我写了一些代码,使用最小二乘的解析解找到了几个数据点的最佳拟合线。现在,我想打印实际数据和我的估算线之间的错误,但是我不知道如何计算它。这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
A = np.array(((0,1),
(1,1),
(2,1),
(3,1)))
b = np.array((1,2,0,3), ndmin = 2 ).T
xstar = np.matmul( np.matmul( np.linalg.inv( np.matmul(A.T, A) ), A.T), b)
print(xstar)
plt.scatter(A.T[0], b)
u = np.linspace(0,3,20)
plt.plot(u, u * xstar[0] + xstar[1], 'b-')
答案 0 :(得分:2)
您已经绘制了线性回归的预测。因此,根据预测值,您可以计算出“平方误差和(SSE)”或“均方误差(MSE)”,如下所示:
y_prediction = u * xstar[0] + xstar[1]
SSE = np.sum(np.square(y_prediction - b))
MSE = np.mean(np.square(y_prediction - b))
print(SSE)
print(MSE)
旁注。您可能要使用np.linalg.pinv
,因为它是数值上更稳定的矩阵逆运算符。
答案 1 :(得分:0)
请注意,numpy
有一个函数,称为lstsq
(即最小二乘),它返回残差和解,因此您不必自己实现它:
xstar, residuals = np.linalg.lstsq(A,b)
MSE = np.mean(resuiduals)
SSE = np.sum(residuals)
尝试!