【问题标题】:Can't figure out how to print the least squares error不知道如何打印最小二乘误差
【发布时间】:2019-10-06 13:14:36
【问题描述】:

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

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

【问题讨论】:

  • 当您说“打印错误”时,您的意思是显示情节吗?
  • 不,情节很好。有了错误,我的意思是得到点和我的线估计之间的差异

标签: python numpy regression least-squares


【解决方案1】:

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

【讨论】:

  • 谢谢你,这行得通!我有一个问题,我也在为同样的数据绘制曲线,而且误差更大,这正常吗?
  • 取决于您绘制的曲线。如果您使用多项式“最小二乘”曲线,并且将其拟合到用于计算误差的相同数据,则误差必须减小。如果您使用的是其他曲线,或者您正在计算其他数据的误差,那么请确保误差可能更大:)。不确定这是否能回答您的问题。
  • 我建议您阅读 Daniela Witten、Gareth James、Robert Tibshirani 和 Trevor Hastie 的“统计学习简介”中关于线性回归的部分
【解决方案2】:

注意,numpy有一个函数,lstsq 987654321 @(即最小二乘),返回残差以及解决方案,因此您不必自己实施:

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

试试吧!

【讨论】:

  • 您确定上述MSE计算是否正确? residuals是每个Numpy文档的平方残差总和。这意味着您需要通过B.Size划分残差以获得MSE。对吗?
  • 是 - 和.mean按大小除以.sum(或者我误读了您的问题?) span>
猜你喜欢
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 2018-12-27
  • 2012-04-29
  • 2014-04-12
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
相关资源
最近更新 更多