Python Can';我不知道如何打印最小平方误差

Python Can';我不知道如何打印最小平方误差,python,numpy,regression,least-squares,Python,Numpy,Regression,Least Squares,我编写了一些代码,使用最小二乘法的解析解为几个数据点找到最佳拟合线。现在我想打印实际数据和估计行之间的误差,但我不知道如何计算它。这是我的密码: 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 xst

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

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

您已经绘制了线性回归的预测。因此,根据预测值,可以计算“平方误差之和(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
,因为这是一个数值上更稳定的矩阵逆运算符

请注意,
numpy
有一个函数调用(即最小二乘法),它返回残差和解,因此您不必自己实现:

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

试试看

当你说“打印错误”时,你的意思是显示绘图吗?不,绘图很好。有了这个错误,我的意思是得到点和线估计值之间的差值。谢谢,这很有效!我有一个问题,我也在用同样的数据绘制一条曲线,误差更大,这正常吗?取决于你正在绘制的曲线。如果使用多项式“最小二乘”曲线,并将其拟合到用于计算误差的相同数据,则误差必须减小。如果您使用的是其他曲线,或者如果您正在计算其他数据上的误差,那么请确保误差可能更大:)。不确定这是否回答了您的问题。我建议您阅读Daniela Witten、Gareth James、Robert Tibshirani和Trevor Hasteeare的《统计学习导论》中关于线性回归的部分。您确定上述MSE计算是正确的吗<代码>残差是每个numpy文档的残差平方和。这意味着您需要将残差除以b.size以获得MSE。是吗?是的-和.mean除以大小,而不是.sum(或者我误解了你的问题?)