机器学习中的简单线性回归

2025年3月17日 | 阅读 7 分钟

简单线性回归是一种回归算法,它模拟因变量与单个自变量之间的关系。简单线性回归模型所表现的关系是线性的或一条有斜率的直线,因此称为简单线性回归。

简单线性回归的关键在于**因变量必须是连续/实数值**。但是,自变量可以是连续的或分类的。

简单线性回归算法主要有两个目标

  • 建模两个变量之间的关系。 例如,收入与支出、经验与薪资等之间的关系。
  • 预测新观测值。 例如,根据温度进行天气预报,根据一年的投资进行公司收入预测等。

简单线性回归模型

简单线性回归模型可以用下面的方程表示

y= a0+a1x+ ε 

其中,

a0 = 回归线的截距(当 x=0 时得到)
a1 = 回归线的斜率,它表明了线的趋势是上升还是下降。
ε = 误差项。(对于一个好的模型,它将是微不足道的)

使用 Python 实现简单线性回归算法

简单线性回归的示例问题陈述

这里我们使用一个包含两个变量的数据集:薪资(因变量)和经验(自变量)。该问题的目标是

  • 我们想找出这两个变量之间是否存在任何相关性
  • 我们将为数据集找到最佳拟合线。
  • 因变量如何随自变量的变化而变化。

在本节中,我们将创建一个简单线性回归模型,以找出代表这两个变量之间关系的最佳拟合线。

要在机器学习中使用 Python 实现简单线性回归模型,我们需要遵循以下步骤

步骤 1:数据预处理

创建简单线性回归模型的第一步是数据预处理。本教程前面已经做过。但会有一些变化,将在后面的步骤中给出。

  • 首先,我们将导入三个重要的库,它们将帮助我们加载数据集、绘制图表以及创建简单线性回归模型。
  • 接下来,我们将数据集加载到我们的代码中

通过执行以上代码行(Ctrl+ENTER),我们可以通过单击变量浏览器选项在 Spyder IDE 屏幕上读取数据集。

Simple Linear Regression in Machine Learning

上面的输出显示了数据集,其中包含两个变量:薪资和经验。

注意: 在 Spyder IDE 中,包含代码文件的文件夹必须保存为工作目录,并且数据集或 csv 文件应放在同一个文件夹中。

  • 之后,我们需要从给定的数据集中提取因变量和自变量。自变量是工作年限,因变量是薪资。以下是相关代码

在上面的代码行中,对于 x 变量,我们取了 -1 值,因为我们想从数据集中删除最后一列。对于 y 变量,我们取了 1 作为参数,因为我们想提取第二列,并且索引从零开始。

通过执行上面的代码行,我们将得到 X 和 Y 变量的输出,如下所示

Simple Linear Regression in Machine Learning

在上面的输出图中,我们可以看到 X(自变量)和 Y(因变量)已从给定数据集中提取。

  • 接下来,我们将把这两个变量拆分为测试集和训练集。我们有 30 个观测值,所以我们将取 20 个观测值用于训练集,10 个观测值用于测试集。我们拆分数据集是为了能够使用训练数据集训练模型,然后使用测试数据集测试模型。代码如下

通过执行上面的代码,我们将得到 x_test、x_train 和 y_test、y_train 数据集。请看下面的图片

测试数据集

Simple Linear Regression in Machine Learning

训练数据集

Simple Linear Regression in Machine Learning
  • 对于简单线性回归,我们不会使用特征缩放。因为 Python 库在某些情况下会处理这个问题,所以我们这里不需要执行它。现在,我们的数据集已准备就绪,可以进行处理,我们将开始为给定的问题构建简单线性回归模型。

步骤 2:将简单线性回归拟合到训练集

现在第二步是将我们的模型拟合到训练数据集。为此,我们将从 **scikit learn** 的 **linear_model** 库中导入 **LinearRegression** 类。导入类后,我们将创建一个名为 **regressor** 的类的对象。代码如下

在上面的代码中,我们使用 **fit()** 方法将我们的简单线性回归对象拟合到训练集。在 fit() 函数中,我们传递了 x_train 和 y_train,这是我们的因变量和自变量的训练数据集。我们将 regressor 对象拟合到训练集,以便模型可以轻松学习预测变量和目标变量之间的相关性。执行完上面的代码行后,我们将得到以下输出。

输出

Out[7]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

步骤 3:预测测试集结果

因变量(薪资)和自变量(经验)。因此,现在我们的模型已准备好预测新观测值的输出。在此步骤中,我们将提供测试数据集(新观测值)给模型,以检查它是否能预测正确的输出。

我们将创建一个预测向量 **y_pred** 和 **x_pred**,其中 **x_pred** 包含训练集的预测,**y_pred** 包含测试集的预测。

执行上面的代码行后,将在变量浏览器选项中生成两个名为 y_pred 和 x_pred 的变量,其中包含训练集和测试集的薪资预测。

输出

您可以通过单击 IDE 中的变量浏览器选项来检查变量,还可以通过比较 y_pred 和 y_test 的值来比较结果。通过比较这些值,我们可以检查模型的性能有多好。

步骤 4:可视化训练集结果

现在,在此步骤中,我们将可视化训练集结果。为此,我们将使用我们已经在预处理步骤中导入的 pyplot 库的 scatter() 函数。**scatter() 函数**将创建观测值的散点图。

在 x 轴上,我们将绘制员工的工作年限;在 y 轴上,绘制员工的薪资。在函数中,我们将传递训练集的真实值,即工作年限 x_train、薪资训练集 y_train 和观测值的颜色。这里我们选择绿色作为观测值的颜色,但也可以选择任何其他颜色。

现在,我们需要绘制回归线,为此,我们将使用 pyplot 库的 **plot() 函数**。在此函数中,我们将传递训练集的工作年限、训练集的预测薪资 x_pred 以及线的颜色。

接下来,我们将为图表设置标题。因此,这里我们将使用 **pyplot** 库的 **title()** 函数,并传递名称(“薪资 vs 经验(训练数据集)”。

之后,我们将使用 **xlabel() 和 ylabel() 函数**为 x 轴和 y 轴分配标签。

最后,我们将使用 show() 在图表中表示上述所有内容。代码如下

输出

通过执行上面的代码行,我们将得到如下图形输出。

Simple Linear Regression in Machine Learning

在上图中,我们可以看到绿色点表示的真实值观测值,预测值由红色回归线覆盖。回归线显示了因变量和自变量之间的相关性。

可以通过计算实际值和预测值之间的差异来观察线的良好拟合。但正如我们在上面的**图**中所见,**大多数观测值都接近回归线,因此我们的模型对于训练集来说是好的**。

步骤 5:可视化测试集结果

在上一步中,我们可视化了模型在训练集上的性能。现在,我们将对测试集执行相同的操作。完整的代码将与上面的代码相同,只是这里我们将使用 x_test 和 y_test 代替 x_train 和 y_train。

这里我们也更改了观测值和回归线的颜色以区分两个图,但这是可选的。

输出

通过执行上述代码行,我们将得到如下输出

Simple Linear Regression in Machine Learning

在上图中,蓝色表示观测值,红色回归线表示预测。正如我们所见,大多数观测值都接近回归线,因此我们可以说我们的简单线性回归是一个好模型,并且能够做出准确的预测。


下一个主题多元线性回归