如何使用numpy.polyfit和打印错误统计信息执行线性回归?

问题描述

我正在弄清楚如何使用np.polyfit函数,而documentation使我感到困惑。特别是,我正在尝试执行线性回归并打印相关的统计信息,例如平方误差总和(SSE)。有人可以提供清晰简洁的解释,也许仅需一个最小的工作示例?

解决方法

np.polyfit返回一个元组,该元组包含参数化系数deg的最佳拟合多项式的系数。要适合一行,请使用deg = 1。您可以通过将full = True作为参数传递给polyfit来返回残差(误差平方和)。请注意,使用此参数,polyfit还将返回有关拟合的其他信息,我们可以将其丢弃。

总而言之,我们可能会有类似的情况

import matplotlib.pyplot as plt
import numpy as np

# Generate some toy data.
x = np.random.rand(25)
y = 2 * x + 0.5 + np.random.normal(scale=0.05,size=x.size)

# Fit the trend line.
(m,b),(SSE,),*_ = np.polyfit(x,y,deg=1,full=True)

# Plot the original data.
plt.scatter(x,color='k')

# Plot the trend line.
line_x = np.linspace(0,1,200)
plt.plot(line_x,m * line_x + b,color='r')

plt.title(f'slope = {round(m,3)},int = {round(b,SSE = {round(SSE,3)}')
plt.show()

*_的调用中的polyfit符号只是告诉Python放弃,但是该函数返回了许多其他值。如果您有兴趣,文档可以告诉您这些额外的值。我们必须将SSE解析为元组(SSE,),因为polyfit将其作为单例数组返回。这段代码产生类似this plot的代码。

您可能还想了解np.polyval,它将采用多项式系数的元组并在输入点评估相应的函数。