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

ast*_*ris 3 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()
Run Code Online (Sandbox Code Playgroud)

我的情节左边的那条线条最合适的直线

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

lee*_*dam 7

如果我理解得很好,那么你的问题就是概念而非实际问题.

如果要显示有点代表数据集的线,可以从三个方面开始:移动平均,插值和多项式拟合.

移动平均值很好地平滑了您的数据集.我不知道它的内置函数,但你可以自己编写代码,就像这里讨论的那样.

插值(例如样条曲线)适合数据集的某些功能,可以在许多点进行评估,然后进行绘图.

使用上面提到的两种方法,您不必指定函数.但是,您可以 自己拟合多项式函数.如何确定多项式的次数?您可以记录所有数据点,将线性线拟合到日志数据,并且如果IT FIT WELL,则可以将线性部分的系数视为原始数据集的多项式的次数.但是,不要使用太大程度的多项式 - 您可以轻松地使用此方法进行过度拟合.