这是python中拟合高斯分布生成的数据的正确方法吗?

这是python中拟合高斯分布生成的数据的正确方法吗?,python,plot,curve-fitting,gaussian,least-squares,Python,Plot,Curve Fitting,Gaussian,Least Squares,我正试图编写一个Python程序来生成使用随机变量(具有高斯分布)和四次多项式方程(3x^4+x^3+3x^2+4x+5)之和的数据。使用最小二乘多项式拟合,使用模型绘制生成的数据曲线,直到模型能够准确预测所有值。我是python新手,我真的很想赶上我快节奏的班级。如有任何帮助和进一步解释,将不胜感激。我在没有for循环的情况下尝试了它,它给出了两条曲线,但我认为它应该匹配初始点。请参阅下面的代码: import random import matplotlib.pyplot as plt im

我正试图编写一个Python程序来生成使用随机变量(具有高斯分布)和四次多项式方程(3x^4+x^3+3x^2+4x+5)之和的数据。使用最小二乘多项式拟合,使用模型绘制生成的数据曲线,直到模型能够准确预测所有值。我是python新手,我真的很想赶上我快节奏的班级。如有任何帮助和进一步解释,将不胜感激。我在没有for循环的情况下尝试了它,它给出了两条曲线,但我认为它应该匹配初始点。请参阅下面的代码:

import random
import matplotlib.pyplot as plt
import numpy as np

def rSquared(obs, predicted):
    error = ((predicted - obs)**2).sum()
    mean = error/len(obs)
    return 1 - (mean/np.var(obs))

def generateData(a, b, c, d, e, xvals):
    for x in xvals:
        calcVal= a*x**4 + b*x**3 + c*x**2 + d*x + e
        yvals.append(calcVal+ random.gauss(0, 35))
xvals = np.arange(-10, 11, 1)
yvals= []
a, b, c, d, e = 3, 1, 3, 4, 5
generateData(a, b, c, d, e, xvals)
for i in range (5):
    model= np.polyfit(xvals, yvals, i)
    estYvals = np.polyval(model, xvals) 
print('R-Squared:', rSquared(yvals, estYvals))
plt.plot(xvals, yvals, 'r', label = 'Actual values') 

plt.plot(xvals, estYvals, 'bo', label = 'Predicted values')
plt.xlabel('Variable x values')
plt.ylabel('Calculated Value of Polynomial')
plt.legend()
plt.show()
此程序运行的结果显示在此图像中
如果没有for循环,这就是我得到的

是的,您只需尝试使用model=np.polyfit(xvals,yvals,i)#i=4,就可以获得与R平方为4:0.9999995005089268的值的完美拟合。

当您没有使用for循环时,您使用了什么作为
np.polyfit
的度参数?看起来您尝试了
np.polyfit(xvals,yvals,2)
。。。使用第四次多项式(循环的最后一次迭代)进行更好的拟合似乎很自然。用np.polyfit(xvals,yvals,4)试试看。。非常感谢。我尝试了四度,它非常适合Rsquared值0.9999