Suavizar de forma óptima las curvas ruidosas
Considere un conjunto de datos aproximado por:
import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2
Esto incluye una variación del 20%. Los enfoques como UnivariateSpline y las medias móviles presentan limitaciones.
Filtro Savitzky-Golay
Una solución eficaz es el filtro Savitzky-Golay, disponible en scipy. Utiliza regresión de mínimos cuadrados para estimar el valor en el centro de una ventana pequeña utilizando un polinomio. Luego, la ventana cambia para repetir el proceso, lo que da como resultado un ajuste optimizado de cada punto.
import numpy as np import matplotlib.pyplot as plt from scipy.signal import savgol_filter x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2 yhat = savgol_filter(y, 51, 3) # window size 51, polynomial order 3 plt.plot(x,y) plt.plot(x,yhat, color='red') plt.show()
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3