什么是向后消除法?

17 Mar 2025 | 6 分钟阅读

向后消除法是一种在构建机器学习模型时使用的特征选择技术。它用于移除那些对因变量或输出预测没有显著影响的特征。在机器学习中构建模型有多种方法,包括:

  1. 全入法
  2. 向后消除
  3. 前向选择
  4. 双向消除法
  5. 分数比较法

以上是机器学习中构建模型的可能方法,但我们在此只使用向后消除法,因为它是最快的方法。

向后消除法的步骤

以下是用于应用向后消除法的一些主要步骤:

步骤-1: 首先,我们需要选择一个显著性水平以保留在模型中。(SL=0.05)

步骤-2: 使用所有可能的预测变量/自变量拟合完整模型。

步骤-3: 选择具有最高 P 值的预测变量,使得:

  1. 如果 P 值 > SL,转到步骤 4。
  2. 否则完成,我们的模型已准备就绪。

步骤-4: 移除该预测变量。

步骤-5: 用剩余变量重建并拟合模型。

向后消除法的必要性:一个最优的多元线性回归模型

在上一章中,我们讨论并成功创建了我们的多元线性回归模型,其中我们使用了 4 个自变量(研发支出、管理支出、市场支出和州(虚拟变量))和一个因变量(利润)。但该模型并非最优,因为我们包含了所有自变量,并且不知道哪个自变量对预测影响最大,哪个影响最小。

不必要的特征会增加模型的复杂性。因此,只保留最重要的特征并保持模型简单以获得更好的结果是好的。

因此,为了优化模型性能,我们将使用向后消除法。此过程用于优化 MLR 模型性能,因为它只会包含影响最大的特征并移除影响最小的特征。让我们开始将其应用于我们的 MLR 模型。

向后消除法的步骤

我们将使用我们在 MLR 前一章中构建的相同模型。以下是完整的代码:

从以上代码中,我们得到了训练集和测试集结果:

Train Score:  0.9501847627493607
Test Score:  0.9347068473282446

两个分数之间的差值为 0.0154。

注意:我们将根据此分数,在使用向后消除过程后,估计特征对我们模型的影响。

步骤 1:向后消除的准备

  • 导入库: 首先,我们需要导入 statsmodels.formula.api 库,该库用于估计各种统计模型,例如 OLS(普通最小二乘法)。以下是代码:
  • 在特征矩阵中添加一列: 正如我们可以在 MLR 方程 (a) 中看到,有一个常数项 b0,但此项在我们的特征矩阵中不存在,因此我们需要手动添加它。我们将添加一列,其值为与常数项 b0 相关的 x0 = 1。
    为此,我们将使用 Numpy 库(我们已将其导入代码为 nm)的 append 函数,并赋给它一个值 1。以下是代码:

这里我们使用了 axis = 1,因为我们想添加一列。要添加一行,我们可以使用 axis = 0。

输出: 通过执行以上代码行,特征矩阵中将添加一个新列,所有值都等于 1。我们可以通过点击变量资源管理器选项下的 x 数据集来检查它。

Backward Elimination

正如我们在上面的输出图像中看到的,第一列已成功添加,它对应于 MLR 方程中的常数项。

步骤:2

  • 现在,我们将实际应用向后消除过程。首先,我们将创建一个新的特征向量 x_opt,它将只包含一组对因变量有显著影响的独立特征。
  • 接下来,根据向后消除过程,我们需要选择一个显著性水平 (0.5),然后需要用所有可能的预测变量拟合模型。因此,为了拟合模型,我们将创建 statsmodels 库的新类 OLSregressor_OLS 对象。然后我们将使用 fit() 方法拟合它。
  • 接下来我们需要 p 值来与 SL 值进行比较,为此我们将使用 summary() 方法获取所有值的摘要表。以下是代码:

输出: 通过执行以上代码行,我们将得到一个摘要表。请看下图:

Backward Elimination

在上面的图片中,我们可以清楚地看到所有变量的p值。这里 x1、x2是虚拟变量,x3是研发支出,x4是管理支出,x5是营销支出

从表格中,我们将选择最高的 p 值,即 x1=0.953。现在,我们得到最高 p 值大于 SL 值,因此将从表格中移除 x1 变量(虚拟变量)并重新拟合模型。以下是代码:

输出

Backward Elimination

正如我们在输出图像中看到的,现在还剩下五个变量。在这些变量中,最高的 p 值为 0.961。因此,我们将在下一次迭代中将其移除。

  • 现在下一个最高值是 x1 变量的 0.961,这是另一个虚拟变量。所以我们将它移除并重新拟合模型。以下是代码:

输出

Backward Elimination

在上面的输出图像中,我们可以看到虚拟变量 (x2) 已经被移除。下一个最高值是 .602,它仍然大于 .5,所以我们需要移除它。

  • 现在我们将移除 p 值为 .602 的管理支出,并再次重新拟合模型。

输出

Backward Elimination

正如我们在上面的输出图像中看到的,变量(管理支出)已被移除。但仍然有一个变量剩下,即 营销支出,因为它具有较高的 p 值 (0.60)。所以我们需要移除它。

  • 最后,我们将再移除一个变量,即营销支出的p值为.60,这高于显著性水平。
    以下是代码:

输出

Backward Elimination

正如我们在上面的输出图像中看到的,只剩下两个变量。因此,只有 研发自变量 是预测的显著变量。所以我们现在可以使用这个变量进行高效预测。

评估性能

在上一主题中,我们计算了使用所有特征变量时模型的训练和测试分数。现在我们将检查只使用一个特征变量(研发支出)时的分数。我们的数据集现在看起来像:

Backward Elimination

以下是仅使用研发支出构建多元线性回归模型的代码

输出

执行上述代码后,我们将得到训练和测试分数如下:

Train Score:  0.9449589778363044
Test Score:  0.9464587607787219

正如我们所看到的,训练分数是 94% 准确,测试分数也是 94% 准确。两个分数之间的差值是 .00149。这个分数非常接近之前使用所有变量时的分数,即 0.0154

我们仅使用一个自变量(研发支出)而不是四个变量就得到了这个结果。因此,现在,我们的模型既简单又准确。