多项式回归预测

目录

1、多项式回归

 2、R-Squared


1、多项式回归

如果在实际中数据点显然不适合线性回归(穿过数据点之间的直线),那么多项式回归可能是理想的选择

像线性回归一样,多项式回归使用变量 x 和 y 之间的关系来找到绘制数据点线的最佳方法

Python 有一些方法可以找到数据点之间的关系并画出多项式回归线。下面将展示如何使用这些方法而不是通过数学公式

在下面的例子中,注册了 18 辆经过特定收费站的汽车

我们已经记录了汽车的速度和通过时间(小时)

x 轴表示一天中的小时,y 轴表示速度

首先绘制散点图

import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

plt.scatter(x, y)
plt.show()

结果如下

多项式回归预测_第1张图片

 导入所需模块和创建表示 x 和 y 轴值的数组

import numpy
import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

NumPy 有一种方法可以让我们建立多项式模型

`numpy.polyfit(x, y, n)` 是 NumPy 库中的一个函数,用于根据给定的数据点拟合一个 n 次多项式模型。其中,`x` 和 `y` 分别是输入的数据点的自变量和因变量,`n` 是多项式的阶数(即次数)

`numpy.polyfit(x, y, n)` 函数返回的是一个多项式系数数组,这个数组中存储了拟合的多项式模型的各项系数

`numpy.poly1d()` 是 NumPy 库中的一个函数,用于根据多项式系数创建一个多项式对象。这个多项式对象可以用于计算多项式在某个点的取值,求导、积分等操作

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

然后指定行的显示方式,我们从位置 1 开始,到位置 22 结束

# 100 表示拟合的程度,通过实际调整来拟合曲线是否平滑
myline = numpy.linspace(1, 22, 100)

绘制原始散点图、画出多项式回归线、显示图表

plt.scatter(x, y)

plt.plot(myline, mymodel(myline))

plt.show()

上面的代码如下

import numpy
import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

myline = numpy.linspace(1, 22, 100)

plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

多项式回归预测_第2张图片

 2、R-Squared

重要的是要知道 x 轴和 y 轴的值之间的关系有多好,如果没有关系,则多项式回归不能用于预测任何东西

该关系用一个称为 r 平方( r-squared)的值来度量

r 平方值的范围是 0 到 1,其中 0 表示不相关,而 1 表示 100% 相关

Python 和 Sklearn 模块计算该值,我们只需要将 x 和 y 值提供给它

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

print(r2_score(y, mymodel(x)))

结果 0.94 表明存在很好的关系,我们可以在将来的预测中使用多项式回归

使用是上面的数据预测在晚上 17 点左右通过收费站的汽车的速度

`numpy.poly1d()` 是 NumPy 库中的一个函数,用于根据多项式系数创建一个多项式对象。这个多项式对象可以用于计算多项式在某个点的取值,求导、积分等操作

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

speed = mymodel(17)
print(speed)

 预测还是符合正常认知的

你可能感兴趣的:(机器学习,回归,机器学习,python)