J'ai plusieurs signaux 1D, montrant deux bandes ou plus. Un exemple est montré ci-dessous. Clustering du signal 1D
J'ai besoin d'extraire les points de données appartenant à une seule bande. Ma première approche simple était de prendre une moyenne mobile des données, et obtenir les indices où les données sont plus grandes que la moyenne.
def seperate(x):
average = scipy.ndimage.gaussian_filter(x, 10)
# this gives me a boolean array with the indices of the upper band.
idx = x > average
# return the indices of the upper and lower band
return idx, ~idx
traçant ces derniers et la courbe moyenne ressemblerait à ceci, où le rouge désigne la bande inférieure supérieure et bleu. Cela fonctionne plutôt bien pour cet exemple, mais échoue lorsque plus de deux bandes sont présentes et/ou les bandes ne sont pas si bien séparées.
Je suis à la recherche d'une solution plus robuste et plus générale. Je cherchais dans scikit-learn et je me demandais si l'un des algorithmes de clustering peut être utilisé pour y parvenir.