关于python

时间:2017-01-15 13:46:41

标签: python numpy

我正在为类项目编写一些代码,要求我找到一些数据点的残差和一条拟合线来测试它的“适合度”

我收到了这段代码:

p, residuals, rank, singular_values, rcond = np.polyfit(temp,voltage,degree,full=True)

但它给出的残差是残差平方的总和。 如果我想要每个点的残差,即每个图和拟合线之间的垂直距离,我该怎么做?

1 个答案:

答案 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)

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