回答问题

我目前正在处理一些拉曼光谱数据,并且正在尝试纠正由荧光倾斜引起的数据。看看下面的图表:

在此处输入图像描述

我非常接近实现我想要的。正如你所看到的,我试图在我的所有数据中拟合一个多项式,而我实际上应该只在局部最小值处拟合一个多项式。

理想情况下,我希望有一个多项式拟合,当从我的原始数据中减去它会导致如下结果:

在此处输入图像描述

是否有任何内置库已经这样做了?

如果没有,可以为我推荐任何简单的算法吗?

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
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐