如何将曲线拟合到非线性数据中?

数据挖掘 线性回归
2021-09-29 04:54:36

我在我的大学里做了一个实验,我收集了数据 (ω,υ(ω)) 由等式建模:

v(ω)=C(ω2ω02)2+γ2ω2

在哪里 ω0是已知的。你知道如何将曲线拟合到我的数据中吗(ω,υ(ω))? 以及如何找到参数γ 通过这个过程?

2个回答

这是一个简单的解决方案,您可以自己计算。求解你的方程是微不足道的γ作为其他值的函数。我们得到

γ=((Cv(ω))2(ω2ω02)2)/ω2

几乎真的,您可以替换您的值并获得几个估计值γ,您可以简单地对其进行平均以获得良好的估计。我说几乎是真的,因为ω接近零,分子和分母都趋于零,因此计算变得不稳定。只要你远离 ω=0,这应该会产生良好的效果。@Esmailian 在他的回答中提供了一些不错的数据。使用他的数据,我得到以下估计γ.

6.012568  5.999664  5.994524  5.991173  6.009153  5.996748  6.019433
5.998072  6.001754  5.993656  6.002409  5.985938  5.996226  5.998363
6.474674  6.525602 14.140690  5.999124  6.000368  5.998427

他的三个 ω的小于 1。这些是给出的估计值 γ

6.474674  6.525602 14.140690      

其余估计的平均值为 5.999859。只要你有足够的 ω不接近零的,这应该提供一个很好的估计 γ.

我使用mycurvefit.com来解决您的问题。创建帐户后(或者如果参数数量为 2 或更少,则可能没有帐户),它可以让您使用最多 20 个数据点来拟合您的函数,这已经足够了。这是一个例子

这正确地找到了g接近 6 的参数 ( )。

这是我生成的 20 个数据点 C=10, ω0=10, 和 γ=6

w       v(w)

5.4881  0.1294
7.1519  0.1538
6.0276  0.1366
5.4488  0.1290
4.2365  0.1164
6.4589  0.1429
4.3759  0.1176
8.9177  0.1746
9.6366  0.1716
3.8344  0.1132
7.9173  0.1655
5.2889  0.1271
5.6804  0.1319
9.2560  0.1744
0.7104  0.1004
0.8713  0.1006
0.2022  0.1000
8.3262  0.1706
7.7816  0.1636
8.7001  0.1737

将它们复制并粘贴到底部的数据表中。

PS:由于均方误差相对于参数的导数方程(导数 = 0),因此无法得出分析答案γ 是棘手的,因此必须在计算机的帮助下使用梯度下降(类似于本网站所做的)。

编辑

我忘了添加噪音 v(ω), 这里有一个嘈杂的 (v~(ω)=v(ω)+N(μ=0,σ=0.01)) 具有相同参数的版本:

w       v(w)
7.7132  0.1512      
0.2075  0.1014      
6.3365  0.1559      
7.488   0.1483      
4.9851  0.1039      
2.248   0.0868      
1.9806  0.106       
7.6053  0.1848      
1.6911  0.1136      
0.8834  0.1174      
6.8536  0.15        
9.5339  0.1866      
0.0395  0.0973      
5.1219  0.1313      
8.1262  0.1656      
6.1253  0.1325      
7.2176  0.1562      
2.9188  0.1026      
9.1777  0.1877      
7.1458  0.1556      

这使 g=5.7,这意味着 20 个数据点不足以应对此级别或更高级别的噪声。

如果你更感兴趣,你可以学习一个像tensorflow这样的框架来构建函数并让它适应任意大量的数据。