我正在为类项目编写一些代码,要求我找到一些数据点的残差和一条拟合线来测试它的“适合度”
我收到了这段代码:
p, residuals, rank, singular_values, rcond = np.polyfit(temp,voltage,degree,full=True)
但它给出的残差是残差平方的总和。 如果我想要每个点的残差,即每个图和拟合线之间的垂直距离,我该怎么做?
答案 0 :(得分:2)
假设您有这些数据点:
np.random.seed(0)
x = np.random.randn(10)
y = 5*x + np.random.randn(10)
在您的代码中,p
为您提供拟合函数的系数:
p, residuals, rank, singular_values, rcond = np.polyfit(x, y, deg=1, full=True)
p
Out: array([ 5.04994402, 0.36378617])
您可以使用以下系数计算拟合点:
y_hat = p[0]*x + p[1] # add higher degree terms if needed
np.polyval
可以做同样的事情:
y_hat = np.polyval(p, x)
y
和y_hat
之间的差异将为您提供残差:
res = y - y_hat
res
Out:
array([-0.30784646, 1.07050188, 0.34836945, -0.35403036, -0.01319629,
0.01869734, 1.08284167, -0.56138505, -0.04556331, -1.23838885])
如果你想检查:
(res**2).sum() == residuals # sum of squared errors
Out: array([ True], dtype=bool)