これらは役に立つかもしれないいくつかの提案です。
- 曲線上のデータは、私の国の道路よりもバンピーです。ですから、曲線を滑らかにすることから始めるべきだと思います。最も単純な中央値平滑化から、LOESSなどのローカル回帰モデルまで、多くの平滑化フィルターがあります。微調整するパラメーターがいくつかあります。例を見てください。
- 極大値を見つける。Pythonのnumpyにはこのための実装があり、これは役立つはずです。
私の考えは、基本的に頭と肩、つまり3つの最大値が得られるまでスムーズにすることです。
警告:スムージングは、曲線上のノイズ(文字通りのノイズの意味ではない)の量を減らしますが、曲線を元の位置からシフトして表現する傾向があります。
Pythonの実装例は次のようになります。
from statsmodels.nonparametric.smoothers_lowess import lowess
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
sample_points = np.array([1,2.3,3.5,3,4.5,5,2.25,33.3,5,6.7,7.3,56.0,70.1,4.2,5.4,6.2,4.4,100,2.9,45,10,3.4,4.8,50,2.3,3.45,5.5,6.7,7.9,8.7,6.1])
for i in np.arange(0,0.5,0.05):
# i in the loop is the percentage of data points we are inputing for the loess regression. Wiki atricle explains it, I guess
filtered = lowess(sample_points,range(len(sample_points)), is_sorted=True, frac=i, it=0)
maxima = argrelextrema(filtered[:,1], np.greater)
if len(maxima[0]) == 3:
plt.plot(filtered[:,1])
plt.show()
このような方法で、確認が必要になる可能性のある方向が示されることを願っています。