【问题标题】:Is there a way to plot a curve of best fit without function? Python有没有办法在没有功能的情况下绘制最佳拟合曲线? Python
【发布时间】:2015-07-15 21:46:40
【问题描述】:

我需要绘制一条最佳拟合的平滑曲线,但我发现的所有方法都使用 scipy.optimize.curve_fit(),这需要知道与 x 和 y 相关的函数。有没有更简单的方法来绘制基本散点图?

我试图获得曲线的目的:

import matplotlib.pyplot as plot

x = range(30)
y = [1, 1, 1, 2, 1, 1, 1, 2, 4, 5, 8, 12, 13, 14, 12, 11, 9, 6, 5, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 ]

plot.plot(x, y, "o")
plot.show()

任何帮助将不胜感激。

【问题讨论】:

  • 在不知道函数的情况下,the curve 是什么意思?您的数据看起来相当高斯 - 您在寻找适合这些数据的高斯吗?
  • 是的,但我不需要知道与 x 和 y 相关的特定高斯函数以获得准确的曲线吗?

标签: python curve-fitting spline smoothing


【解决方案1】:

通常为了平滑而不猜测生成函数,人们使用样条曲线。这是使用您的数据的示例:

import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
import numpy as np

x = range(30)
y = [1, 1, 1, 2, 1, 1, 1, 2, 4, 5, 8, 12, 13, 14, 12, 11, 9, 6, 5, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 ]

s = UnivariateSpline(x, y, s=5)
xs = np.linspace(0, 29, 100)
ys = s(xs)

plt.plot(x, y, 'o')
plt.plot(xs, ys)
plt.show()

您可能已经猜到了,关键字s 用于设置拟合与数据的匹配程度,其中s=0 将遍历每个点。

样条线基本上将一个简单的函数拟合到曲线的局部点集,然后匹配边界处的导数以连接这些局部曲线,因此最终结果看起来很平滑。

scipy中有多种样条例程可供选择。

【讨论】:

  • 太棒了。从 cmets 到您的主要问题,您似乎更喜欢拟合高斯,这也是可能的,但与此解决方案有很大不同。请说明您是否确实想要完全合身。
  • 我的数据有点烦人,x 必须严格增加UnivariateSpline 的输入。在我的情况下,我将在传递给UnivariateSpline 之前对给定 x 的 y 值进行平均,但如果有一个函数可以自动处理这个问题,那就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2011-07-03
  • 2019-10-15
相关资源
最近更新 更多