Comment lisser les courbes de données bruyantes : un guide complet et une solution

Linda Hamilton
Libérer: 2024-10-20 15:57:29
original
203 Les gens l'ont consulté

How to Smooth Noisy Data Curves: A Comprehensive Guide and 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()
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal