我无法让 scipy.interpolate.UnivariateSpline 在插值时使用任何平滑。根据函数的页面以及之前的一些帖子,我相信它应该提供s
参数平滑。
这是我的代码:
# Imports
import scipy
import pylab
# Set up and plot actual data
x = [0, 5024.2059124920379, 7933.1645067836089, 7990.4664106277542, 9879.9717114947653, 13738.60563208926, 15113.277958924193]
y = [0.0, 3072.5653360000988, 5477.2689107965398, 5851.6866463790966, 6056.3852496014106, 7895.2332350173638, 9154.2956175610598]
pylab.plot(x, y, "o", label="Actual")
# Plot estimates using splines with a range of degrees
for k in range(1, 4):
mySpline = scipy.interpolate.UnivariateSpline(x=x, y=y, k=k, s=2)
xi = range(0, 15100, 20)
yi = mySpline(xi)
pylab.plot(xi, yi, label="Predicted k=%d" % k)
# Show the plot
pylab.grid(True)
pylab.xticks(rotation=45)
pylab.legend( loc="lower right" )
pylab.show()
结果如下:
我已经尝试过使用一系列s
值(0.01、0.1、1、2、5、50)以及显式权重,设置为相同的值(1.0)或随机设置。我仍然无法进行任何平滑处理,并且结的数量始终与数据点的数量相同。特别是,我正在寻找像第 4 点(7990.4664106277542、5851.6866463790966)这样的异常值来平滑处理。
是因为我没有足够的数据吗?如果是这样,我可以应用类似的样条函数或聚类技术来实现对这几个数据点的平滑吗?