Python/SciPy のピーク検出アルゴリズム
データ内のピークの検出は、データ分析における一般的なタスクです。 Python ユーザー向けに、SciPy は、この目的のために特別に調整された scipy.signal.find_peaks 関数を提供します。
適切なパラメータの選択
ピークを効果的に識別するには、使用可能なパラメータを理解するパラメータは非常に重要です。幅、しきい値、距離などのパラメーターはある程度の有用性を提供しますが、真のピークとノイズを真に区別するパラメーターは プロミネンス です。
プロミネンスとは何ですか?
プロミネンスは、山頂からより高い地形に下りるのに必要な高さを測定します。言い換えれば、周囲のデータ ポイントに対するピークの「重要性」を示します。
ピーク検出にプロミネンスを使用する
周波数が変化する正弦波を使用して find_peaks をテストすると、プロミネンスの有効性。他のパラメーターはさまざまなピーク幅やノイズ レベルを考慮するのに苦労しますが、プロミネンスは一貫して重要なピークを識別します。
コード例
次のコード スニペットは、find_peaks と次のコードの使用を示しています。さまざまなパラメーター:
<code class="python">import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000) + np.random.normal(0, 1, 1000) * 0.15 peaks, _ = find_peaks(x, distance=20) peaks2, _ = find_peaks(x, prominence=1) # BEST! peaks3, _ = find_peaks(x, width=20) peaks4, _ = find_peaks(x, threshold=0.4) plt.subplot(2, 2, 1) plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance']) plt.subplot(2, 2, 2) plt.plot(peaks2, x[peaks2], "ob"); plt.plot(x); plt.legend(['prominence']) plt.subplot(2, 2, 3) plt.plot(peaks3, x[peaks3], "vg"); plt.plot(x); plt.legend(['width']) plt.subplot(2, 2, 4) plt.plot(peaks4, x[peaks4], "xk"); plt.plot(x); plt.legend(['threshold']) plt.show()</code>
結果は、ノイズが存在する場合でも、プロミネンスが重要なピークを効果的に識別することを示しています。プロミネンスなどのパラメータを距離や幅などの他のパラメータと組み合わせることで、複雑なデータのピーク検出をさらに改良できます。
以上がProminence は SciPy を使用した Python でのピーク検出にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。