gpt4 book ai didi

python - 广义加性模型 - Python

转载 作者:行者123 更新时间:2023-11-28 22:25:00 25 4
gpt4 key购买 nike

我正在尝试使用广义可加模型来拟合非线性模型。如何确定要使用的样条线数。有没有特定的方法来选择样条数?我使用了三阶(三次)样条拟合。下面是代码。

from pygam import LinearGAM
from pygam.utils import generate_X_grid

# Curve fitting using GAM model - Penalised spline curve.
def modeltrain(time,value):
return LinearGAM(n_splines=58,spline_order=3).gridsearch(time, value)

model=modeltrain(t1,x1)

# samples random x-values for prediction
XX = generate_X_grid(model)

#plots for vizualisation
plt.plot(XX, model.predict(XX), 'r--')
plt.plot(XX, model.prediction_intervals(XX,width=0.25), color='b', ls='-- ')
plt.scatter(t1, x1)
plt.show()

这是预期的结果

enter image description here

原始数据散点图

enter image description here

如果样条线的数量没有选择正确,那么我得到一个不正确的拟合。

拜托,我想要一个准确选择样条数的方法的建议。

最佳答案

通常对于样条曲线,您选择相当多的样条曲线(~25),并让 lambda 平滑参数完成降低模型灵 active 的工作。

对于您的用例,我会选择默认的 n_splines=25,然后对 lambda 参数 lam 进行网格搜索以找到最佳的平滑量:

def modeltrain(time,value):
return LinearGAM(n_splines=25,spline_order=3).gridsearch(time, value, lam=np.logspace(-3, 3, 11))

这将尝试从 lam = 1e-31e3 的 11 个模型。

我认为您选择的 n_splines=58 太高了,因为它看起来像每个数据点生成一条样条曲线。

如果您真的想要搜索 n_splines 那么您可以这样做:

LinearGAM(n_splines=25,spline_order=3).gridsearch(time, value, n_splines=np.arange(50))

注意:generate_X_grid 函数不会对预测进行随机抽样,它实际上只是对 X 值(时间)进行密集的线性间隔。这样做的原因是可视化学习模型将如何插值。

关于python - 广义加性模型 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45879954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com