本文概要
- 简单线性回归模型
- 使用Python实现简单线性回归算法
简单线性回归的关键是因变量必须是连续/实值。然而,自变量可以通过连续或分类值来测量。
简单线性回归算法主要有两个目标:
- 为这两个变量之间的关系建模。比如收入和支出的关系,经验和工资等。
- 预测新观测。比如根据温度来预测天气,根据一年的投资来预测公司的收入,等等。
y= a0+a1x+ ε
【简单线性回归的机器学习】其中,
- a0=回归线截距(令x=0可得)
- a1=这是回归线的斜率,它表示这条线是增加还是减少。
- ε=误差项。(对于一个好的模型,它可以忽略不计)
这里我们使用的数据集有两个变量:工资(因变量)和经验(自变量)。这个问题的目标是:
- 我们想知道这两个变量之间是否有相关性
- 我们将为数据集找到最佳拟合线。
- 因变量是如何通过改变因变量来改变的。
要使用Python实现机器学习中的简单线性回归模型,我们需要遵循以下步骤:
步骤-1:数据预处理
建立简单线性回归模型的第一步是数据预处理。我们在本教程的前面已经做过了。但是会有一些变化,在下面的步骤中给出:
- 首先,我们将导入三个重要的库,这将有助于我们对加载的数据集,绘制图表,并创建简单线性回归模型。
import numpy as nm
import matplotlib.pyplot as mtp
import pandas as pd
- 接下来,我们将加载数据集到我们的代码:
data_set= pd.read_csv('Salary_Data.csv')
通过执行上述代码行(ctrl+ENTER),我们可以通过单击variable explorer选项来读取Spyder IDE屏幕上的数据集。
文章图片
上面的输出显示了数据集,它有两个变量:工资和经验。
注:在Spyder IDE中,包含代码文件的文件夹必须保存为工作目录,数据集或csv文件应该在同一个文件夹中。
- 之后,我们需要从给定的数据集中提取因变量和自变量。自变量是工作年限,因变量是工资。下面是它的代码:
x= data_set.iloc[:,:-1].values
y= data_set.iloc[:,1].values
在上面的代码行中,对于x变量,我们取了-1值,因为我们想从数据集中删除最后一列。对于y变量,我们取1个值作为参数,因为我们想提取第二列,并且索引从0开始。
通过执行上面的代码行,我们将会得到X和Y变量作为输出:
文章图片
另外,在上述输出图像,我们可以看到X(独立的)变量和Y(依赖)变量已经从给定的数据集提取。
- 接下来,我们将把这两个变量分成测试集和训练集。我们有30观察,所以我们将20观测为训练集和10观察测试集,我们将我们的数据集,所以我们可以训练我们的模型使用一个训练数据集,然后测试模型使用一个测试数据集。代码如下所示
# Splitting the dataset into training and test set.
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test= train_test_split(x,y,test_size= 1/3,random_state=0)
通过执行上述代码,我们将得到x-test、x-train和y-test、y-train数据集。考虑一下下面的图片:
测试数据集:
文章图片
训练集:
文章图片
- 对于简单的线性回归,我们不会使用特征缩放。因为Python库在某些情况下处理它,所以我们不需要在这里执行它。现在,我们的数据集已经准备好了,我们将开始为给定的问题建立一个简单的线性回归模型。
现在,第二步是将我们的模型拟合于训练数据集。为此,我们将从scikit learn中导入linear_model库的LinearRegression类。导入类之后,我们将创建该类的一个对象,并将其命名为regressor。代码如下所示:
#Fitting the Simple Linear Regression model to the training dataset
from sklearn.linear_model import LinearRegression
regressor= LinearRegression()
regressor.fit(x_train,y_train)
在上面的代码中,我们使用了fit()方法将简单的线性回归对象匹配到训练集。在fit()函数中,我们传入了x_train和y_train,这是我们的因变量和自变量的训练数据集。我们已经将回归对象拟合到训练集上,这样模型就可以很容易地了解预测器和目标变量之间的相关性。在执行上述代码行之后,我们将得到下面的输出。
输出:
Out[7]: LinearRegression(copy_X=True,fit_intercept=True,n_jobs=None,normalize=False)
步骤3:测试集结果预测:
因变量(工资)和自变量(经验)。现在,我们的模型已经准备好预测新的观测结果。在这个步骤中,我们将向模型提供测试数据集(新的观察结果),以检查它是否能够预测正确的输出。
我们将创建一个预测向量y_pred和x_pred,分别包含测试数据集的预测和训练集的预测。
#Prediction of Test and Training set result
y_pred= regressor.predict(x_test)
x_pred= regressor.predict(x_train)
在执行上述代码行时,将在变量资源管理器选项中生成两个变量y_pred和x_pred,其中包含训练集和测试集的薪资预测。
输出:
你可以通过单击IDE中的variable explorer选项来检查变量,也可以通过比较来自y_pred和y_test的值来比较结果。通过比较这些值,我们可以检查我们的模型执行得有多好。
步骤4:可视化训练集的结果:
现在在这一步,我们将可视化训练集的结果。为此,我们将使用pyplot库的scatter()函数,我们已经在预处理步骤中导入了该函数。函数的作用是:创建观测值的散点图。
x轴表示员工的工作年限,y轴表示员工的工资。在函数中,我们将传递训练集的真实值,即一年的经验x_train、工资y_train的训练集和观察值的颜色。这里我们用绿色来观察,但是根据选择,它可以是任何颜色。
现在,我们需要绘制回归线,为此,我们将使用pyplot库的plot()函数。在这个函数中,我们将通过对培训集多年的经验,对培训集x_pred的预测工资,以及线条的颜色。
接下来,我们将给予图表一个标题的。所以在这里,我们将使用pyplot库的title()函数,名称为“Salary vs Experience (Training Dataset)”。
之后,我们将使用xlabel()和ylabel()函数为x轴和y轴分配标签。
最后,我们将使用show()在一个图中表示上述所有内容。代码如下:
mtp.scatter(x_train,y_train,color="green")
mtp.plot(x_train,x_pred,color="red")
mtp.title("Salary vs Experience (Training Dataset)")
mtp.xlabel("Years of Experience")
mtp.ylabel("Salary(In Rupees)")
mtp.show()
输出:
通过执行上面的代码行,我们会得到下面的图作为输出。
文章图片
在上面的图中,我们可以看到绿点代表的实测值,红线代表的是预测值。回归曲线显示了因变量和自变量之间的相关性。
通过计算实际值与预测值的差值,可以看出该曲线拟合良好。但是正如我们在上面的图中所看到的,大部分的观察值都接近于回归曲线,因此我们的模型对于训练集来说是很好的。
步骤5:可视化测试集的结果:
在前面的步骤中,我们有可视化的表示我们的模型在训练集上。现在,我们将做同样的为测试集。完整的代码仍将上面的代码一样,除了这一点,我们将使用x_test, y_test代替x_train y_train。
在这里,我们也正在改变观察和回归直线的两个地块之间区分的颜色,但它是可选的。
#visualizing the Test set results
mtp.scatter(x_test,y_test,color="blue")
mtp.plot(x_train,x_pred,color="red")
mtp.title("Salary vs Experience (Test Dataset)")
mtp.xlabel("Years of Experience")
mtp.ylabel("Salary(In Rupees)")
mtp.show()
输出:
通过执行上面的代码行,我们将得到的输出:
文章图片
在上图中,蓝色表示观测值,红色回归线表示预测值。正如我们所看到的,大多数的观察结果都接近于回归线,因此我们可以说我们的简单线性回归是一个很好的模型,并且能够做出很好的预测。