ホームページ  >  記事  >  バックエンド開発  >  ノイズの多いデータ曲線を滑らかにする方法: 包括的なガイドとソリューション

ノイズの多いデータ曲線を滑らかにする方法: 包括的なガイドとソリューション

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-20 15:57:29198ブラウズ

How to Smooth Noisy Data Curves: A Comprehensive Guide and Solution

ノイズのあるデータの曲線の平滑化: 包括的なガイド

ノイズや不規則性を示すデータセットを扱う場合、効果的な手法を見つけることが重要になります。これらの偏差を平滑化し、根本的な傾向を抽出します。この記事では、曲線の平滑化を実現するためのさまざまなアプローチを詳しく掘り下げ、ノイズ処理の特有の課題に対処します。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。