ノイズのあるデータの曲線の平滑化: 包括的なガイド
ノイズや不規則性を示すデータセットを扱う場合、効果的な手法を見つけることが重要になります。これらの偏差を平滑化し、根本的な傾向を抽出します。この記事では、曲線の平滑化を実現するためのさまざまなアプローチを詳しく掘り下げ、ノイズ処理の特有の課題に対処します。
Univariate Spline 関数
Scipy の UnivariateSpline 関数は、次の一般的なオプションです。曲線の平滑化。ただし、データを過剰適合させて追加のノイズを導入する傾向があるため、常にノイズを効果的に処理できるとは限りません。
移動平均
移動平均アプローチも使用できます。これには、データ ポイントのサブセットの平均を計算し、これを平滑化された値として使用することが含まれます。ただし、過剰な平滑化やアンダーフィッティングを避けるためには、移動平均に適切な遅延を選択することが重要です。
Savitzky-Golay フィルター: 堅牢なソリューション
Savitzky-Golay フィルターノイズの多い曲線を滑らかにするための堅牢なソリューションとして浮上します。最小二乗法を利用して、データ ポイントの小さなウィンドウに多項式を当てはめます。ウィンドウをシフトしてプロセスを繰り返すことにより、各ポイントが隣接ポイントに対して最適に調整されます。
SciPy による実装
Python で Savitzky-Golay フィルターを実装するには、次のようにします。クックブックのサンプルで提供されている savitzky_golay() 関数、または SciPy ライブラリの savgol_filter() 関数を使用できます。次のコードは、savgol_filter() 関数を使用してノイズの多い正弦波データセットを平滑化する方法を示しています。
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()
Savitzky-Golay フィルターを適用することにより、全体の傾向を維持しながら、ノイズの多い正弦波が効果的に平滑化されます。これは、ノイズを低減し、根底にある信号を抽出する際のフィルターの有効性を示しています。
以上がノイズの多いデータ曲線を滑らかにする方法: 包括的なガイドとソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。