如何解决pyGAM中导数的计算
我想计算拟合 GAM 模型 a
在 pyGAM 中特定点的导数。该模型只包含样条项,因此它应该是一个有效的 BSpline。
确实,使用 pygam.utils.b_spline_basis
给出了一个矩阵,我可以乘以 a.coefs
以从 a.predict
恢复 pyGAM 预测。
这个想法是使用 BSpline 的解析导数来获得导数。有关详细信息,请参阅 here 或只是维基百科的 BSpline 文章。
我想出了这个:
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,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],spline_order=2,periodic=False)
要恢复 y1
:x0@a.coefs_
效果很好。
为了得到我有的导数
der2=x[:,1:]@(a.coef_[1:]-a.coef_[:-1])/((edges[1]-edges[0])/(len(a.coef_)))
我也尝试过这种方法的各种变体,但无法得到令人满意的解决方案 (2*x1
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。