Python 中线性回归的假设检验

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

机器学习中的线性回归模型用于预测某个属性的未来值。在此模型中,我们有特定的独立属性,也称为预测变量。模型接收这些预测变量,拟合一条直线到数据,并为我们提供一个模型,使用这些独立属性的特定值来预测因属性的值。通过拟合,我们指的是优化参数以获得最优解。

我们可以尝试独立属性的不同组合来找出哪个能更准确地预测值。然而,这种方法需要大量工作。但问题出现了,如何快速找到哪个属性对模型至关重要。有许多方法,例如调整 R 方误差和均方误差,通过这些方法我们使用模型找到因属性的值,并找到实际值和预测值之间的差异来判断模型的准确性。

解决此问题的另一种统计方法是假设检验。我们将创建一个假设,计算统计量的值,并根据显著性水平和 p 值来判断模型拟合的质量。

在手动特征消除中,我们做什么?

需要遵循的步骤如下:

  1. 使用所有期望的特征构建一个机器学习模型。
  2. 删除您认为不会为模型结果增加任何价值的特征。这些是 p 值较高的特征。
  3. 测试特征之间的相关性,并删除相关性强的特征。
  4. 使用一组新特征重新构建模型,并重复此过程。

通常,研究人员建议在自动选择和手动选择之间保持平衡,以获得最优数量的特征。我们将讨论如何在特征选择中使用假设检验。

在进行假设检验之前,让我们先了解线性回归模型及其参数。

在线性回归中,我们拟合一条直线到数据。直线具有以下方程:

Hypothesis Testing of Linear Regression in Python

其中 y 是自变量,是直线的截距,是直线的斜率。为简单起见,我们只使用一个自变量。

由于我们考虑的模型总体拟合的特征不止一个,我们将忽略它们。我们将专注于直线的斜率,即特征的系数。我们将使用内置的糖尿病数据集及其两个特征,一个自变量和一个因变量。

代码

输出

Hypothesis Testing of Linear Regression in Python

散点图

我们将拟合一个回归模型到数据集并绘制回归线。

代码

输出

The intercept of the linear equations is 152.13348416289594 and the slope of the line is 304.18307452830607

Hypothesis Testing of Linear Regression in Python

从图中可以清楚地看出,散点图是随机分布的,并且两个特征之间没有趋势。即使散点图没有遵循线性趋势,Python 也会拟合一个线性模型到数据。然而,在这种情况下,误差项会很大,准确性会很低。因此,拟合一条直线并不意味着数据可以通过回归线来解释。因此,我们需要其他度量来确定该特征是否适合我们正在使用的机器学习模型。

在我们的示例中,要测试 x 是否重要,我们将对 x 进行假设检验。

执行假设检验的步骤

  1. 声明假设
  2. 设定决策标准,称为显著性水平。
  3. 计算检验统计量
  4. 与显著性水平进行比较,做出决策。

步骤 1

我们将从陈述假设开始。假设将基于 β1 的值。由于这是原假设,我们必须声明与 β1 相关的相等关系。

我们将假设 β1 不显著。这意味着 x 和 y 之间没有关系。当直线的斜率为零时,就会发生这种情况。

因此,β1=0

原假设 (H0):β1=0

备择假设 (HA):β1≠0

步骤 2

现在我们必须设定一个界限来告诉我们应该接受还是拒绝原假设。通常,显著性水平的值为 1%、5% 和 10%。我们将显著性水平设为 5%。

步骤 3

现在到了假设检验的主要部分。我们必须计算检验统计量,它将衡量 x 在 y 的回归模型中的显著性。我们将把检验统计量的值与显著性水平进行比较,以决定 x 的显著性。但是,检验统计量不直接与显著性水平进行比较。我们比较与计算出的检验统计量值相对应的 p 值。让我们看看这意味着什么。

我们将计算自变量 x 的均值的 t 分数。

Hypothesis Testing of Linear Regression in Python

其中 μ 是总体均值,s 是所选样本的标准差。N 是样本数量。s/√n 一起称为标准误差。

现在,我们必须找到 p 值。我们将使用 t 分布的累积概率表,也称为 t 表,来查找 t 分数的 p 值。

根据 p 值和给定的显著性水平值做出决定。

步骤 4

现在,我们将看到接受或拒绝原假设的规则。在下面的规则中,0.05 是显著性水平。对于 5%,原假设的拒绝区域小于 0.05。

  • 如果 p 值 < 0.05,我们将拒绝原假设,β1 是显著的。
  • 如果 p 值 > 0.05,我们必须接受原假设,β1 不显著。

如果我们未能拒绝原假设,那意味着 β1 为零(换句话说,β1 不显著)并且对模型没有用。同样,如果我们拒绝原假设,那意味着 β1 不为零,并且拟合的直线是显著的。

我们一直只使用一个自变量。现在让我们看看上述符号对于多元线性回归模型将如何变化。

多元回归模型的线性方程如下:

Hypothesis Testing of Linear Regression in Python

其中 k 是模型中自变量的总数。

以下是多元线性模型的原假设和备择假设。

原假设 (H0):β1= β2= β3=...= βk=0 备择假设 (HA):至少存在一个 i,其中 i 的取值范围是 1 到 k,且 β1≠0。

Python 中的示例

现在让我们看看 Python 中假设的实现。我们将使用相同的数据集,但这次我们将考虑所有自变量和一个因变量。我们必须为该数据拟合多元线性回归模型来预测糖尿病水平。让我们看一下数据集的各个列。

这里我们有属性名称以及自变量和因变量的前 5 行。

代码

输出

Features Names:
 ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
Independent Features:
 [[ 0.03807591  0.05068012 
0.06169621  0.02187239 -0.0442235  -0.03482076
  -0.04340085 -0.00259226  0.01990749 -0.01764613]
 [-0.00188202 -0.04464164 -0.05147406 -0.02632753 -0.00844872 -0.01916334
   0.07441156 -0.03949338 -0.06833155 -0.09220405]
 [ 0.08529891  0.05068012 
0.04445121 -0.00567042 -0.04559945 -0.03419447
  -0.03235593 -0.00259226  0.00286131 -0.02593034]
 [-0.08906294 -0.04464164 -0.01159501 -0.03665608 
0.01219057  0.02499059
  -0.03603757  0.03430886 
0.02268774 -0.00936191]
 [ 0.00538306 -0.04464164 -0.03638469  0.02187239  0.00393485 
0.01559614
   0.00814208 -0.00259226 -0.03198764 -0.04664087]]
Dependent Features:
 [151.  75. 141. 206. 135.]

这次我们将使用 statsmodel 来拟合线性回归模型。我们使用这个库是因为它有一个显示线性拟合汇总统计量的方法。汇总统计量包括系数的 p 值和 3 种不同置信水平或显著性水平的统计量值。

代码

输出

Hypothesis Testing of Linear Regression in Python

现在,查看常数和每个系数的 p 值和 t 统计量。所有 p 值大于 t 统计量模数的属性对模型都不显著。statsmodel 库只需一次方法调用即可简化假设检验。

从上表可以看出,x1、x7、x8 和 x10 对回归模型不显著。


下一个主题Python 高级用法