Maison > Article > développement back-end > Comment lisser les courbes de données bruyantes : un guide complet et une solution
Lissage des courbes pour les données bruyantes : un guide complet
Lorsque vous traitez des ensembles de données présentant du bruit ou des irrégularités, il devient crucial de trouver des techniques efficaces pour lisser ces écarts et extraire la tendance de fond. Cet article examine diverses approches pour obtenir un lissage des courbes, en abordant le défi spécifique de la manipulation du bruit.
Fonction Spline univariée
La fonction UnivariateSpline de Scipy est une option courante pour lissage des courbes. Cependant, il ne gère pas toujours efficacement le bruit, car il a tendance à surajuster les données et à introduire du bruit supplémentaire.
Moyenne mobile
Une approche de moyenne mobile peut également être utilisée. , qui consiste à calculer la moyenne d'un sous-ensemble de points de données et à l'utiliser comme valeur lissée. Cependant, la sélection d'un délai approprié pour la moyenne mobile est essentielle pour éviter un lissage ou un sous-ajustement excessif.
Filtre Savitzky-Golay : une solution robuste
Le filtre Savitzky-Golay apparaît comme une solution robuste pour lisser les courbes bruyantes. Il utilise une approche des moindres carrés pour ajuster un polynôme à une petite fenêtre de points de données. En décalant la fenêtre et en répétant le processus, chaque point est ajusté de manière optimale par rapport à ses voisins.
Implémentation avec SciPy
Pour implémenter le filtre Savitzky-Golay en Python, on peut utiliser la fonction savitzky_golay() fournie par l'exemple du livre de recettes ou la fonction savgol_filter() de la bibliothèque SciPy. Le code suivant montre comment utiliser la fonction savgol_filter() pour lisser un ensemble de données sinusoïdales bruyantes :
import numpy as np import matplotlib.pyplot as plt from scipy.signal import savgol_filter # Generate noisy sinusoidal data x = np.linspace(0,2*np.pi,100) y = np.sin(x) + np.random.random(100) * 0.2 # Apply Savitzky-Golay filter yhat = savgol_filter(y, 51, 3) # window size 51, polynomial order 3 # Plot original and smoothed data plt.plot(x,y) plt.plot(x,yhat, color='red') plt.show()
En appliquant le filtre Savitzky-Golay, la sinusoïde bruyante est efficacement lissée tout en préservant la tendance globale. Cela démontre l'efficacité du filtre pour réduire le bruit et extraire le signal sous-jacent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!