python - 在 Python 中将曲线拟合到数据集

标签 python numpy matplotlib scipy

我有一个包含两个数据集的图,它会产生轻微的梯度,其中一条最佳拟合曲线 可能被过度绘制。

目前我只设法得到一条最合适的直线。我知道 scipy.optimize.curve_fit 应该能够帮助我,但这需要我知道我想要叠加的函数(我认为)。

下面是我的代码和图表。如何为这些数据集创建曲线图?

plt.figure(figsize=(15,6.6))
pl.subplot(1,2,1) 
plt.plot(gg,AA, 'kx')
plt.xlabel('x')
plt.ylabel('y')
plt.gca().invert_yaxis()
y=AA
x=gg
fit=pl.polyfit(x,y,1)
#slope, fit_fn=pl.poly1d(fit)
fit_fn=pl.poly1d(fit)
scat=pl.plot(x,y, 'kx', x,fit_fn(x), '-b' )


pl.subplot(1,2,2) 
pl.plot(LL,pp, 'kx')#shows points with no removal or bestfit
plt.gca().invert_yaxis()

plt.savefig('1.jpg')
plt.show()

my plots the left one has the straight line of best fit

应该注意的是,可能没有曲线,但我想发现是否有适合的曲线。

最佳答案

如果我理解得很好,您的问题与其说是实际问题,不如说是概念性问题。

如果您想显示一条在某种程度上代表您的数据集的线,您可以从三件事开始:移动平均线、插值法和多项式拟合。

移动平均线可以很好地平滑您的数据集。我不知道它有内置函数,但您可以自己编写代码,正如所讨论的那样 here .

插值(例如 spline)适合数据集上的某些函数,可以在许多点进行评估,然后绘制。

使用上述两种方法,您不必指定函数。但是,您可以 fit a polynomial自己发挥作用。如何确定多项式的次数?您可以获取所有数据点的日志,对日志数据拟合一条线性线,如果拟合良好,则线性部分的系数可以视为原始数据集的多项式的次数。但是,不要使用太多次数的多项式 - 您很容易遇到 overfitting用这个方法。

关于python - 在 Python 中将曲线拟合到数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20525793/

相关文章:

python - 基于另一个数据帧在数据帧中的特定位置插入多列

python - NumPy:获取 3D 数组行和的 argmax 的最快方法

python - 在 matplotlib 中自定义 x 轴

python - 如何使用 matplotlib 将元数据添加到 Windows 10 中轻松出现的图像

python - 识别网页上广告的机制 [特别是 AdBlock]

python - 使用 python 3 抓取 Json

python - Visual Studio 不适用于 Anaconda 环境

python - 比较具有不同数量项目的列表

python - 如何在 C++ 中创建类似于 Python 的 numpy 数组的数组?

Python - matplotlib、pyplot、x 和 y 错误栏方向错误?