Python 使用numpy平滑无局部极值的曲线
我试图为我的数据点得到一条平滑的曲线。假设(lin_space,rms)是我需要绘制的有序对。对于以下代码-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-') 在使用单变量样条线平滑后,我得到了蓝线,而我需要像图中所示那样的红
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()
谢谢!它应该是一个平方根函数!我很难弄明白这一点。谢谢你让事情变得简单。