📅  最后修改于: 2020-09-27 02:10:51             🧑  作者: Mango
可以从以下几点理解ML中多项式回归的需求:
注意:多项式回归算法也称为多项式线性回归,因为它不取决于变量,而是取决于以线性方式排列的系数。
简单线性回归方程:y = b0 + b1x ………(a)
多元线性回归方程:y = b0 + b1x + b2x2 + b3x3 + …. + bnxn ………(b)
多项式回归方程:y = b0 + b1x + b2x2 + b3x3 + …. + bnxn ……….(c)
当我们比较上述三个方程时,我们可以清楚地看到所有三个方程都是多项式方程,但是变量的程度不同。简单线性方程和多重线性方程也是单次多项式方程,多项式回归方程是第n次线性方程。因此,如果我们在线性方程式中增加一个度数,那么它将被转换为多项式线性方程式。
注意:为了更好地理解多项式回归,您必须具有简单线性回归的知识。
在这里,我们将使用Python实现多项式回归。通过将多项式回归模型与简单线性回归模型进行比较,我们将了解它。因此,首先,让我们了解要构建模型的问题。
问题描述:有一家人力资源公司,它将雇用新的候选人。候选人已经告诉了他以前的年薪16万,而人力资源部必须检查他是在说实话还是虚张声势。因此,为了确定这一点,他们只拥有他以前公司的数据集,其中提到了前10名职位的薪水及其级别。通过检查可用的数据集,我们发现职位级别和薪水之间存在非线性关系。我们的目标是建立Bluffing检测器回归模型,以便HR可以聘请诚实的候选人。以下是构建此类模型的步骤。
多项式回归的主要步骤如下:
注意:在这里,我们将建立线性回归模型以及多项式回归,以查看预测之间的结果。线性回归模型可供参考。
数据预处理步骤:
数据预处理步骤将与以前的回归模型相同,只是有所不同。在多项式回归模型中,我们将不使用特征缩放,也不会将数据集拆分为训练和测试集。它有两个原因:
预处理步骤的代码如下:
# importing libraries
import numpy as nm
import matplotlib.pyplot as mtp
import pandas as pd
#importing datasets
data_set= pd.read_csv('Position_Salaries.csv')
#Extracting Independent and dependent Variable
x= data_set.iloc[:, 1:2].values
y= data_set.iloc[:, 2].values
说明:
输出:
通过执行以上代码,我们可以将数据集读取为:
从上面的输出中可以看到,存在三列(位置,级别和薪水)。但是,我们仅考虑两列,因为“位置”等同于级别,或者可能被视为“位置”的编码形式。
在这里,我们将预测6.5级的输出,因为该候选人具有4年以上区域经理的经验,因此他必须在7至6级之间。
建立线性回归模型:
现在,我们将建立线性回归模型并将其拟合到数据集。在建立多项式回归时,我们将以线性回归模型为参考,并比较两个结果。代码如下:
#Fitting the Linear Regression to the dataset
from sklearn.linear_model import LinearRegression
lin_regs= LinearRegression()
lin_regs.fit(x,y)
在上面的代码中,我们使用LinearRegression类的lin_regs对象创建了简单线性模型,并将其拟合到数据集变量(x和y)。
输出:
Out[5]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
建立多项式回归模型:
现在我们将建立多项式回归模型,但是它与简单线性模型有些不同。因为在这里我们将使用预处理库的PolynomialFeatures类。我们正在使用此类为数据集添加一些额外的功能。
#Fitting the Polynomial regression to the dataset
from sklearn.preprocessing import PolynomialFeatures
poly_regs= PolynomialFeatures(degree= 2)
x_poly= poly_regs.fit_transform(x)
lin_reg_2 =LinearRegression()
lin_reg_2.fit(x_poly, y)
在上面的代码行中,我们使用了poly_regs.fit_transform(x),因为首先我们将特征矩阵转换为多项式特征矩阵,然后将其拟合到多项式回归模型。参数值(度= 2)取决于我们的选择。我们可以根据我们的多项式特征进行选择。
执行代码之后,我们将获得另一个矩阵x_poly,可以在变量资源管理器选项下看到它:
接下来,我们使用了另一个LinearRegression对象lin_reg_2,以将x_poly向量拟合到线性模型。
输出:
Out[11]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
可视化线性回归的结果:
现在,我们将像在简单线性回归中一样直观地显示线性回归模型的结果。下面是它的代码:
#Visulaizing the result for Linear Regression model
mtp.scatter(x,y,color="blue")
mtp.plot(x,lin_regs.predict(x), color="red")
mtp.title("Bluff detection model(Linear Regression)")
mtp.xlabel("Position Levels")
mtp.ylabel("Salary")
mtp.show()
输出:
在上面的输出图像中,我们可以清楚地看到回归线离数据集很远。预测是红色的直线,而蓝点是实际值。如果我们认为这一产出可预测CEO的价值,则其薪水将约为10美元。 600000 $,这与实际价值相去甚远。
因此,我们需要一个曲线模型来拟合数据集,而不是直线。
可视化多项式回归的结果
在这里,我们将可视化多项式回归模型的结果,该模型的代码与上述模型几乎没有什么不同。
代码如下:
#Visulaizing the result for Polynomial Regression
mtp.scatter(x,y,color="blue")
mtp.plot(x, lin_reg_2.predict(poly_regs.fit_transform(x)), color="red")
mtp.title("Bluff detection model(Polynomial Regression)")
mtp.xlabel("Position Levels")
mtp.ylabel("Salary")
mtp.show()
在上面的代码中,我们采用lin_reg_2.predict(poly_regs.fit_transform(x)而不是x_poly,因为我们希望使用线性回归对象来预测多项式特征矩阵。
输出:
正如我们在上面的输出图像中看到的那样,预测值接近真实值。上面的图会随着我们改变程度而变化。
对于学位= 3:
如果将度数更改为3,则将给出更准确的图,如下图所示。
因此,如我们在上面的输出图像中看到的那样,级别6.5的预测薪水接近170K $ -190k $,这似乎是未来员工在说关于薪水的真相。
度= 4:让我们再次将度更改为4,现在将获得最准确的绘图。因此,我们可以通过增加多项式的次数来获得更准确的结果。
使用线性回归模型预测最终结果:
现在,我们将使用线性回归模型预测最终输出,以查看员工是在说真话还是虚张声势。因此,为此,我们将使用predict()方法并传递值6.5。下面是它的代码:
lin_pred = lin_regs.predict([[6.5]])
print(lin_pred)
输出:
[330378.78787879]
使用多项式回归模型预测最终结果:
现在,我们将使用多项式回归模型预测最终输出,以与线性模型进行比较。下面是它的代码:
poly_pred = lin_reg_2.predict(poly_regs.fit_transform([[6.5]]))
print(poly_pred)
输出:
[158862.45265153]
正如我们所看到的,多项式回归的预测输出为[158862.45265153],它非常接近实际价值,因此,我们可以说未来的员工说的是真的。