Python 中的曲线拟合2025年3月17日 | 阅读 8 分钟 引言曲线拟合是一种优化,用于为适用于给定观测集定义的函数找到最优参数集。 与监督学习不同,曲线拟合要求我们定义将示例输入映射到输出的函数。 用于映射的函数也称为基函数,它可以构成我们想要的任何内容,例如直线(线性回归)、曲线(多项式回归)等。此映射函数提供了定义曲线形状的灵活性和控制力,并通过优化过程来查找函数的特定最优参数。 在接下来的教程中,我们将了解什么是曲线拟合以及如何在 Python 中执行它。 在本教程结束时,我们将理解以下内容:
理解曲线拟合正如我们之前讨论的,曲线拟合是一个优化问题,它允许我们找到一条适合一组观测值的直线。 将其想象成二维图表中的曲线拟合会更容易。 假设我们已经从问题域收集了数据示例,包括输入和输出。 图表的 x 轴充当独立变量,即函数的输入。另一方面,y 轴充当因变量,即函数的输出。我们可能不知道将示例输入映射到输出的函数形式;但是,我们可以使用标准函数形式来近似该函数。 曲线拟合包括以下阶段:
误差使用域提供的观测值来估计,将输入传递给候选目标函数并估计输出。计算出的输出与实验输出进行比较。 拟合完成后,我们可以使用基函数对域中的新点进行插值或外插。通常通过使用基函数处理一系列输入值来估计一系列输出值。之后,我们根据结果绘制线图,显示输入和输出之间的变化,并将拟合线放在观测点上。 曲线拟合的解释是基函数的形式。输入和输出之间的直线可以用下面的公式描述: y = a × x + b 其中 y 是估计输出,x 是输入,a 和 b 是通过优化算法找到的基函数参数。 这个方程称为线性方程,因为它是由输入的加权组合构成的。 在线性回归模型中,这些参数表示为系数,而在神经网络中,这些参数称为权重。 我们可以将此方程推广到任意数量的输入,这意味着曲线拟合的概念不限于二维(其中一个是输入,另一个是输出)。然而,它可能包含多个输入变量。 例如,两个输入变量的直线目标函数的公式可能如下所示: y = a1 × x1 + a2 × x2 + b 方程不一定看起来像一条直线。 我们可以通过插入指数来定义目标函数的曲线。例如,我们可以插入由另一个参数加权的输入平方版本,如下所示: y = a × x + b × x2 + c 这个方程称为多项式回归,其中平方项指的是二阶多项式。 这类线性方程可以通过最小二乘法拟合并进行解析估计,这意味着我们可以借助一些线性代数找到参数的最优值。 有些人可能还想在方程中包含其他数学函数,例如 sin、cos、tan 等。每个项都由一个参数加权,并加到整个方程中以产生以下输出: y = a × sin(b × x) + c 通过向目标函数添加任意数学函数,我们无法解析估计参数;但是,我们需要使用迭代优化算法。 此方程被认为是非线性最小二乘法,因为映射函数不再是凸的(它是非线性的),并且求解相对不那么容易。 既然我们已经成功理解了什么是曲线拟合,现在是时候开始学习如何在 Python 中进行曲线拟合了。 在 Python 中执行曲线拟合可以使用 Python 对数据集执行曲线拟合。Python 提供了一个名为 SciPy 包的开源库。这个 SciPy 包包含一个名为 curve_fit() 的函数,用于通过非线性最小二乘法进行曲线拟合。 curve_fit() 函数除了要使用的目标函数的名称外,还需要相同的输入和输出数据作为参数。 目标函数必须包含输入数据示例和一些参数。其余的参数将成为非线性最小二乘优化过程将要优化的系数或权重常数。 让我们来看一个示例演示来理解这个概念。 假设我们有从域中加载的几个观测值,其中 x 是输入变量的数量,y 是输出变量的数量。 语法 现在,我们需要设计一个目标函数来拟合数据,并将其实现为一个接受输入和参数的 Python 函数。 让我们假设该函数是一条直线,如下所示: 语法 函数定义后,我们可以调用 curve_fit() 函数来通过定义的映射函数拟合数据集中的直线。 curve_fit() 函数将返回目标函数的最佳值,例如系数的值。该函数还将返回计算参数的协方差矩阵;但是,这可以暂时忽略。 语法 成功拟合后,我们可以利用最优参数和目标函数映射()来评估任何主观输入的输出。 此函数可能涉及我们已经从域中收集的示例的输出。它可能包含一些可以内插观测值的新值。它还可能包含超出观测值范围的外插值。 语法 既然我们已经了解了如何使用曲线拟合的 API,让我们来看一个实际示例。 Python 曲线拟合的实际示例让我们从导入项目所需的包和库开始。 语法 导入包后,我们需要为程序提供测试数据以实现曲线拟合。因此,我们将定义基本的输入数据 x 和输出数据 y,如下所示。 语法 之后,我们将定义一些映射函数,以利用 curve_fit() 方法并验证它们在拟合方面的差异。我们将使用下面显示的方程作为映射函数:
相同过程在以下语法中有所描述: 语法 使用 curve_fit() 函数拟合数据非常简单,它分别提供映射函数、数据 x 和 y。curve_fit() 方法将返回最优参数和计算的协方差值作为输出。 语法 输出 Arguments: [-0.08139835 0.8636481 11.1362229 ] Co-Variance: [[ 2.38376125e-04 -3.81401800e-03 9.53504499e-03] [-3.81401800e-03 6.55534344e-02 -1.88793892e-01] [ 9.53504499e-03 -1.88793892e-01 7.79966692e-01]] 正如我们所观察到的,curve_fit() 函数评估了最优参数和协方差。然后我们为用户打印了这些值。 我们将通过将目标函数和数据 x、y 配置到 curve_fit() 方法中来开始拟合数据,并获取包含 a、b、c 参数值的结果数据。由于我们不在此处使用协方差值,因此可以跳过它。之后,我们将使用导出的 a、b、c 值为每个函数估算拟合的 y 值。 语法 最后,我们将绘制图形以直观地验证差异。相同语法的示例如下: 语法 程序的最终图表如下所示: Graph ![]() |
虚假新闻的传播对现代民主国家构成严重问题。不准确的信息会影响人们的健康和福祉,尤其是在 COVID-19 疫情的艰难时期。虚假信息还会通过阻止人们参与公共生活来破坏公众对民主机构的信任...
阅读 15 分钟
Python IDE 和代码编辑器 您可以在本手册中找到许多适用于初学者和专家的 Python 集成开发环境和代码编辑器。用于编写和编辑代码的工具称为代码编辑器。它们通常是可移植的,并且对学习有益。使用 IDE 变得必要...
阅读 3 分钟
在本教程中,我们将学习 Python 中的 LRU 缓存。我们将学习缓存策略以及如何使用 Python 装饰器实现它们,LRU 策略及其工作原理。我们还将讨论如何通过缓存来提高性能,以及...
7 分钟阅读
在数学中,我们用 null 来表示“无”,在某些编程语言如 C 和 Java 中,NULL 也表示相同的意思,但在 Python 中则不同。通常,在其他编程语言中,当指针指向空或变量...
阅读 6 分钟
Python的random包有一个内置函数shuffle()。它可以在Python中用来打乱一个序列(如列表或元组);打乱意味着改变集合中元素的索引。random.shuffle()的语法 我们使用shuffle()函数来改变索引...
5 分钟阅读
对于所有的 Python 开发者或任何其他语言的开发者来说,了解我们正在学习的编程语言的技巧和窍门总是很有趣的。众所周知,Python 是开发者中最受青睐的编程语言之一...
5 分钟阅读
NLP 和 SpaCy 的描述 自然语言处理 (NLP) 的人工智能领域旨在使计算机能够理解人类语言。分析、测量、理解和从自然语言中推断意义都是 NLP 的一部分。注意:基于 Transformer 的 NLP 模型目前最有效。BERT 来自...
阅读 8 分钟
游戏世界中有许多流行的游戏是使用Python框架及其库开发的,例如《战地2》、《加勒比海盗》等等。大多数开发人员更喜欢Python语言而不是其他编程语言,因为它具有许多功能...
阅读 6 分钟
在本教程中,我们将了解 bPython,它是一个具有 IDE 功能的 REPL。Python 中的字母 b 代表 Bob Farrell,他是该工具的作者和维护者。标准的 Python 解释器是一个允许您执行...
阅读 4 分钟
我们有不同的方法可以在 Google 地图上绘制地理坐标。然而,在我们需要将其保存到本地文件的情况下,一个更好的方法是使用一个名为 gmplot 的 Python 模块。Python gmplot 库允许...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India