无法弄清楚如何打印最小二乘误差

Can't figure out how to print the least squares error

我编写了一些代码,使用最小二乘法的解析解为几个数据点找到最佳拟合线。现在我想打印实际数据和我估计的线之间的误差,但我不知道如何计算它。这是我的代码:

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-')

您已经绘制了线性回归的预测图。因此,根据预测值,您可以计算 "sum of square errors (SSE)" 或 "mean square error (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,因为它是一个数值更稳定的矩阵逆运算符。

注意 numpy 有一个函数,调用 lstsq(即 least-squares),returns 残差和解,所以你不需要不必自己实现:

xstar, residuals = np.linalg.lstsq(A,b)
MSE = np.mean(residuals)
SSE = np.sum(residuals)

试试吧!