橡皮筋基线校正(Rubberband)

介绍

橡皮筋基线校正是一种用于数据处理和插值的方法。其原理是通过找到数据点集合的凸包,并使用

插值技术在凸包的顶点之间创建一条称为基线的曲线。

原理

1. 首先,通过计算数据点集合的凸包,即能够包围数据点的最小凸多边形,来确定基线的形状。凸包是由数据点集合中最外层的顶点所组成,这些顶点定义了数据的整体形状。

2. 然后,通过对凸包的顶点进行排序,使得最低的顶点成为基线的起始点。

在基线的创建过程中,使用插值技术将基线的顶点之间进行连接。

插值是一种根据已知数据点之间的关系来估计未知位置处数值的方法。在这种情况下,通过线性插值、曲线拟合或其他插值方法,通过连接基线顶点之间的数据点,生成一条平滑的曲线,成为最终的基线。

橡皮筋基线校正的目的是描述数据的整体趋势,并通过消除噪声和误差,使数据更易于分析和理解。

模拟数据

nb_points  =500
x = np.linspace(50, 500, nb_points)

# 高斯峰
p1 = 20.0 * np.exp(-np.log(2) * ((x-150.0)/15.0)**2)
p2 = 100.0 * np.exp(-np.log(2) * ((x-250.0)/5.0)**2)
p3 = 60.0 * np.exp(-np.log(2) * ((x-450.0)/1.0)**2)
p4 = 20.0 * np.exp(-np.log(2) * ((x-350.0)/30.0)**2)
p5 = 40.0 * np.exp(-np.log(2) * ((x-460.0)/15.0)**2)

# 背景:正弦失真 + 线性 
bkg = 12*np.sin(x/50) + 0.1*x

#噪声
noise = 4.0 * np.random.normal(size=nb_points)

y = p1 + p2 + p3 + p4 + p5 + noise +bkg

plt.plot(x,y,"r-")

 

橡皮筋基线校正(Rubberband)_第1张图片

代码

import numpy as np
from scipy.spatial import ConvexHull

def rubberband(x, y):
    # Find the convex hull
    v = ConvexHull(np.array(list(zip(x, y)))) # 将zip对象转换为数组
    v = v.vertices
    # Rotate convex hull vertices until they start from the lowest one
    v = np.roll(v, -v.argmin())
    # Leave only the ascending part
    v = v[:v.argmax()]

    # Create baseline using linear interpolation between vertices
    return np.interp(x, x[v], y[v])

橡皮筋基线校正(Rubberband)_第2张图片

你可能感兴趣的:(算法,python,机器学习,深度学习,回归)