我目前正在处理一些拉曼光谱数据,并且正在尝试纠正由花期偏差引起的数据。看看下面的图表:
我已经非常接近实现我想要的了。正如您所看到的,我试图在所有数据中拟合多项式,而我实际上应该在局部最小值处拟合多项式。
理想情况下,我想要一个多项式拟合,当从原始数据中减去该多项式拟合时,会得到如下结果:
是否有任何内置库可以做到这一点?
如果没有,有什么简单的算法可以推荐给我吗?
我找到了我的问题的答案,只是分享给所有偶然发现这个问题的人。
2005 年,P. Eilers 和 H. Boelens 提出了一种名为“非对称最小二乘平滑”的算法。这篇论文是免费的,你可以在 google 上找到它。
def baseline_als(y, lam, p, niter=10):
L = len(y)
D = sparse.csc_matrix(np.diff(np.eye(L), 2))
w = np.ones(L)
for i in xrange(niter):
W = sparse.spdiags(w, 0, L, L)
Z = W + lam * D.dot(D.transpose())
z = spsolve(Z, w*y)
w = p * (y > z) + (1-p) * (y < z)
return z
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)