首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyGAM中导数的计算

pyGAM中导数的计算
EN

Stack Overflow用户
提问于 2021-01-30 21:04:12
回答 1查看 74关注 0票数 1

我想在pyGAM中计算一个拟合的GAM模型a在特定点的导数。该模型只包含样条项,因此它应该是一个有效的BSpline。

实际上,使用pygam.utils.b_spline_basis可以得到一个矩阵,我可以将该矩阵与a.coefs相乘,以从a.predict恢复pyGAM预测。这个想法是使用BSpline的解析导数来获得导数。有关更多信息,请参阅here或直接使用维基百科的BSpline文章。

我想出了这个:

代码语言:javascript
复制
def GetGAM(x,y,err):
    
    if len(x)>5:
        gam=pygam.LinearGAM(pygam.s(0, n_splines=len(x)),penalties=__PenaltyD3,lam=0,fit_intercept=False)
        gam=gam.fit(x,y, weights=1/err)
        #print('done')
        return gam

x1 = np.linspace(0,50,10)
y1=x1**2
err=np.ones(10)

a = GetGAM(x1,y1,err)
x0=pygam.utils.b_spline_basis(x1,pygam.utils.gen_edge_knots(x1,'numerical'),spline_order=3,n_splines=len(a.coef_), periodic=False)
x=pygam.utils.b_spline_basis(x1,pygam.utils.gen_edge_knots(x1[:-1],'numerical'),spline_order=2,n_splines=len(a.coef_), periodic=False)

要恢复y1x0@a.coefs_工作得很好。为了得到导数,我有der2=x[:,1:]@(a.coef_[1:]-a.coef_[:-1])/((edges[1]-edges[0])/(len(a.coef_)))

我也尝试过它的各种变体,但无法得到令人满意的解决方案(2*x1)。

EN

回答 1

Stack Overflow用户

发布于 2021-10-28 15:07:46

我回答了一个相关的问题,并提出了一种数值方法,用于获得符合数据的pygam的导数。以下是可能满足您的要求的链接:

Numerical derivative(s) of pygam spline.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65968289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档