Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy平滑无局部极值的曲线_Python_Numpy_Scipy_Curve Fitting_Smoothing - Fatal编程技术网

Python 使用numpy平滑无局部极值的曲线

Python 使用numpy平滑无局部极值的曲线,python,numpy,scipy,curve-fitting,smoothing,Python,Numpy,Scipy,Curve Fitting,Smoothing,我试图为我的数据点得到一条平滑的曲线。假设(lin_space,rms)是我需要绘制的有序对。对于以下代码- spl=UnivariateSpline(lin_space,rms) x=np.arange(0,1001,0.5) plt.plot(lin_space,rms,'k.') plt.plot(lin_space,spl(lin_space),'b-') plt.plot(x,np.sqrt(x),'r-') 在使用单变量样条线平滑后,我得到了蓝线,而我需要像图中所示那样的红

我试图为我的数据点得到一条平滑的曲线。假设(lin_space,rms)是我需要绘制的有序对。对于以下代码-

spl=UnivariateSpline(lin_space,rms)
x=np.arange(0,1001,0.5)    
plt.plot(lin_space,rms,'k.')
plt.plot(lin_space,spl(lin_space),'b-')
plt.plot(x,np.sqrt(x),'r-')
在使用单变量样条线平滑后,我得到了蓝线,而我需要像图中所示那样的红色图(没有局部极值)


您将需要更有限的型号

对于所显示的数据,一个选项是使用平方根函数进行最小二乘。这应该会产生好的结果

运行平均值将是平滑的(er),这取决于您对条款的权重

带有RBF+白噪声核的高斯过程回归可能值得研究,在RBF核的长度尺度上有适当的先验边界。OTOH,你的残差不是正态分布的,所以这个模型可能不适合边缘的值

注意:如果您特别想要一个没有局部极值的函数,您需要选择一类具有该属性的模型。e、 g.拟合平方根函数

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import sklearn.linear_model
mpl.rcParams['figure.figsize'] = (18,16)

WINDOW=30
def ma(signal, window=30):
    return sum([signal[i:-window+i] for i in range(window)])/window


X=np.linspace(0,1000,1000)
Y=np.sqrt(X) + np.log(np.log(X+np.e))*np.random.normal(0,1,X.shape)
sqrt_model_X = np.sqrt(X)
model = sklearn.linear_model.LinearRegression()
model.fit(sqrt_model_X.reshape((-1,1)),Y.reshape((-1,1)))

plt.scatter(X,Y,c='b',marker='.',s=5)
plt.plot(X,np.sqrt(X),'r-')
plt.plot(X[WINDOW:],ma(Y,window=WINDOW),'g-.')
plt.plot(X,model.predict(sqrt_model_X.reshape((-1,1))),'k--')
plt.show()

谢谢!它应该是一个平方根函数!我很难弄明白这一点。谢谢你让事情变得简单。