Python 中线性回归的假设检验2025年3月17日 | 阅读 8 分钟 机器学习中的线性回归模型用于预测某个属性的未来值。在此模型中,我们有特定的独立属性,也称为预测变量。模型接收这些预测变量,拟合一条直线到数据,并为我们提供一个模型,使用这些独立属性的特定值来预测因属性的值。通过拟合,我们指的是优化参数以获得最优解。 我们可以尝试独立属性的不同组合来找出哪个能更准确地预测值。然而,这种方法需要大量工作。但问题出现了,如何快速找到哪个属性对模型至关重要。有许多方法,例如调整 R 方误差和均方误差,通过这些方法我们使用模型找到因属性的值,并找到实际值和预测值之间的差异来判断模型的准确性。 解决此问题的另一种统计方法是假设检验。我们将创建一个假设,计算统计量的值,并根据显著性水平和 p 值来判断模型拟合的质量。 在手动特征消除中,我们做什么?需要遵循的步骤如下:
通常,研究人员建议在自动选择和手动选择之间保持平衡,以获得最优数量的特征。我们将讨论如何在特征选择中使用假设检验。 在进行假设检验之前,让我们先了解线性回归模型及其参数。 在线性回归中,我们拟合一条直线到数据。直线具有以下方程: ![]() 其中 y 是自变量,是直线的截距,是直线的斜率。为简单起见,我们只使用一个自变量。 由于我们考虑的模型总体拟合的特征不止一个,我们将忽略它们。我们将专注于直线的斜率,即特征的系数。我们将使用内置的糖尿病数据集及其两个特征,一个自变量和一个因变量。 代码 输出 ![]() 散点图我们将拟合一个回归模型到数据集并绘制回归线。 代码 输出 The intercept of the linear equations is 152.13348416289594 and the slope of the line is 304.18307452830607 从图中可以清楚地看出,散点图是随机分布的,并且两个特征之间没有趋势。即使散点图没有遵循线性趋势,Python 也会拟合一个线性模型到数据。然而,在这种情况下,误差项会很大,准确性会很低。因此,拟合一条直线并不意味着数据可以通过回归线来解释。因此,我们需要其他度量来确定该特征是否适合我们正在使用的机器学习模型。 在我们的示例中,要测试 x 是否重要,我们将对 x 进行假设检验。 执行假设检验的步骤
步骤 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 分数。 ![]() 其中 μ 是总体均值,s 是所选样本的标准差。N 是样本数量。s/√n 一起称为标准误差。 现在,我们必须找到 p 值。我们将使用 t 分布的累积概率表,也称为 t 表,来查找 t 分数的 p 值。 根据 p 值和给定的显著性水平值做出决定。 步骤 4现在,我们将看到接受或拒绝原假设的规则。在下面的规则中,0.05 是显著性水平。对于 5%,原假设的拒绝区域小于 0.05。
如果我们未能拒绝原假设,那意味着 β1 为零(换句话说,β1 不显著)并且对模型没有用。同样,如果我们拒绝原假设,那意味着 β1 不为零,并且拟合的直线是显著的。 我们一直只使用一个自变量。现在让我们看看上述符号对于多元线性回归模型将如何变化。 多元回归模型的线性方程如下: ![]() 其中 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 种不同置信水平或显著性水平的统计量值。 代码 输出 ![]() 现在,查看常数和每个系数的 p 值和 t 统计量。所有 p 值大于 t 统计量模数的属性对模型都不显著。statsmodel 库只需一次方法调用即可简化假设检验。 从上表可以看出,x1、x7、x8 和 x10 对回归模型不显著。 下一个主题Python 高级用法 |
全世界数百万用户使用消息应用程序 Telegram。此外,Telegram 还提供 API,允许我们构建机器人并自动化消息传输。因此,在本文中,我们将使用 Python 将消息发送给 Telegram 用户。您可能知道...
阅读 3 分钟
在本教程中,我们将学习 FastAPI 框架以及如何创建 REST API。我们将了解为什么 FastAPI 如此受欢迎,以及它与其他可用框架有何不同。我们还将讨论如何创建实现最佳实践的 Web API...
7 分钟阅读
Selenium Python 模块支持自动化的 Python 测试。Selenium Python 绑定为 Selenium WebDriver 的功能和验收测试提供了一个简单的 API。使用 Python Selenium 编程接口,您可以快速访问所有 Selenium WebDriver 的功能。有关 Selenium 的更多数据,请访问 Selenium...
阅读 3 分钟
Python 中的 JSON Schema JSON Schema 是一种用于验证 JSON 文档的 Python 语言。它包含键/值对,其中每个键用于指定特定 JSON 数据的结构。使用 JSON Schema 可以提供易于理解、高质量的数据和文档。JSON Schema 是...
5 分钟阅读
数据科学在每个电子商务业务中的著名用途之一是推荐系统。为了增加时尚领域的销售额和用户参与度,一家电子商务公司希望向其用户推荐最流行的时尚。Myntra 是著名的电子商务网站之一,以其......而闻名。
阅读 22 分钟
Python是一种可以服务于不同目的的编程语言,用它几乎可以做任何事情。Python也可以用于开发游戏。开发游戏是学习如何编写程序的好方法。在下面的教程中,我们将学习如何...
阅读 13 分钟
在本教程中,我们将编写一个 Python 程序来查找给定二维矩阵中 1 的最大数量。在给定的矩阵中,每一行都是排序的,我们需要找到包含最大数量 1 的行。让我们看看…
7 分钟阅读
asyncio 模块。asyncio 模块具有出色的功能,允许我们编写更高效的 Python 异步应用程序。我们将探讨如何在 Python 中管理异步事件循环。在深入探讨此主题之前,让我们了解什么是异步编程。什么是异步...
7 分钟阅读
在下面的教程中,我们将了解如何混淆 Python 程序。我们将使用一个名为 pyarmor 的 Python 包进行混淆。我们有时可能会遇到这样一种情况,即由于某些原因,我们必须将代码直接交付给客户。但是,我们...
阅读 4 分钟
本教程将演示如何使用 PyQt5 构建计时器应用程序。计时器确实是一种特殊类型的时钟,用于测量某些时间间隔;要使用它,请从提供的时间开始倒计时,直到它等于零。实现 GUI 的步骤:制作...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India