如何在 python 中执行多项式回归


回归分析用于量化一个或多个解释变量与响应变量之间的关系。

最常见的回归分析类型是简单线性回归,当预测变量和响应变量具有线性关系时使用。

然而,有时预测变量和响应变量之间的关系是非线性的。

例如,真实关系可能是二次关系:

或者它可以是立方的:

在这些情况下,使用多项式回归是有意义的,它可以解释变量之间的非线性关系。

本教程介绍如何在 Python 中执行多项式回归。

示例:Python 中的多项式回归

假设我们在 Python 中有以下预测变量 (x) 和响应变量 (y):

 x = [2, 3, 4, 5, 6, 7, 7, 8, 9, 11, 12]
y = [18, 16, 15, 17, 20, 23, 25, 28, 31, 30, 29]

如果我们创建该数据的简单散点图,我们可以看到 x 和 y 之间的关系显然不是线性的:

 import matplotlib.pyplot as plt

#create scatterplot 
plt.scatter(x, y)

因此,对这些数据拟合线性回归模型是没有意义的。相反,我们可以尝试使用numpy.polyfit()函数拟合 3 次多项式回归模型:

 import numpy as np

#polynomial fit with degree = 3
model = np.poly1d(np.polyfit(x, y, 3))

#add fitted polynomial line to scatterplot
polyline = np.linspace(1, 12, 50)
plt.scatter(x, y)
plt.plot(polyline, model(polyline))
plt.show() 

Python 中的多项式回归线

我们可以通过打印模型系数得到拟合的多项式回归方程:

 print(model)

poly1d([ -0.10889554, 2.25592957, -11.83877127, 33.62640038])

拟合的多项式回归方程为:

y = -0.109x 3 + 2.256x 2 – 11.839x + 33.626

在给定解释变量的给定值的情况下,该方程可用于查找响应变量的期望值。

例如,假设 x = 4。响应变量 y 的预期值为:

y = -0.109(4) 3 + 2.256(4) 2 – 11.839(4) + 33.626= 15.39

我们还可以编写一个简短的函数来获取模型的 R 平方,它是响应变量中可以由预测变量解释的方差的比例。

 #define function to calculate r-squared
def polyfit(x, y, degree):
    results = {}
    coeffs = numpy.polyfit(x, y, degree)
    p = numpy.poly1d(coeffs)
    #calculate r-squared
    yhat = p(x)
    ybar = numpy.sum(y)/len(y)
    ssreg = numpy.sum((yhat-ybar)**2)
    sstot = numpy.sum((y - ybar)**2)
    results['r_squared'] = ssreg / sstot

    return results

#find r-squared of polynomial model with degree = 3
polyfit(x, y, 3)

{'r_squared': 0.9841113454245183}

在此示例中,模型的 R 平方为0.9841

这意味着响应变量中98.41%的变异可以通过预测变量来解释。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注