Python基线校正库
·
回答问题
我目前正在处理一些拉曼光谱数据,并且正在尝试纠正由荧光倾斜引起的数据。看看下面的图表:
我非常接近实现我想要的。正如你所看到的,我试图在我的所有数据中拟合一个多项式,而我实际上应该只在局部最小值处拟合一个多项式。
理想情况下,我希望有一个多项式拟合,当从我的原始数据中减去它会导致如下结果:
是否有任何内置库已经这样做了?
如果没有,可以为我推荐任何简单的算法吗?
Answers
我找到了我的问题的答案,只是分享给每个偶然发现这个问题的人。
P. Eilers 和 H. Boelens 在 2005 年有一个名为“Asymmetric Least Squares Smoothing”的算法。该论文是免费的,您可以在 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
更多推荐
所有评论(0)