Des techniques de clustering appropriées pour les données temporelles?

13

J'ai des données temporelles de fréquences d'activité. Je veux identifier des grappes dans les données qui indiquent des périodes de temps distinctes avec des niveaux d'activité similaires. Idéalement, je veux identifier les clusters sans spécifier le nombre de clusters a priori.

Quelles sont les techniques de clustering appropriées? Si ma question ne contient pas suffisamment d'informations pour répondre, quelles sont les informations que je dois fournir pour déterminer les techniques de clustering appropriées?

Voici une illustration du type de données / clustering que j'imagine: regroupement dans le temps

histelheim
la source
L'intrigue me semble lissée (interpolée). C'est probablement trompeur. Et «longitudinal», je associé aux géodonnées, mais apparemment, vous regardez une série chronologique?
A QUIT - Anony-Mousse
1
Ne faites pas trop attention à l'intrigue, ce n'est qu'un exemple. Ce que je veux réaliser, c'est l'identification d'épisodes distincts de temps en fonction de variables qui varient dans le temps. Longitudinal, dans mon esprit, est le même que les données temporelles, voir par exemple en.wikipedia.org/wiki/Longitudinal_study
histelheim
Parce que dans le clustering, vous verrez ce terme principalement comme dans en.wikipedia.org/wiki/Longitude - de votre question, il n'est pas clair ce que vous voulez grouper. Vous pouvez regrouper, par exemple, des intervalles de temps qui se comportent de manière similaire entre les "sujets", ou des sujets qui montrent la même progression dans le temps.
A QUIT - Anony-Mousse
1
J'ai changé «longitudinal» en «temporel» pour éviter toute confusion. En utilisant vos mots, je pense que je veux regrouper les intervalles de temps . Cependant, il est important pour moi que les grappes soient des épisodes distincts et continus dans le temps.
histelheim
Les recherches avec des mots clés "segmentation de séries chronologiques" ou "modèles de changement de régime" peuvent vous aider.
Yves

Réponses:

6

D'après mes propres recherches, il semble que les modèles de Markov cachés gaussiens pourraient être un bon choix: http://scikit-learn.org/stable/auto_examples/plot_hmm_stock_analysis.html#example-plot-hmm-stock-analysis-py

Il semble définitivement trouver des épisodes d'activité distincts.

Modèle de Markov caché gaussien

histelheim
la source
Ne devez-vous pas savoir combien d'états cachés il y a à l'avance? Y a-t-il un moyen de contourner cela?
JCWong
@JCWong Je pense que vous pouvez utiliser une variante bayésienne non paramétrique (le modèle de Markov infini caché) pour éviter cela.
jtobin
Après un long moment cependant: HMM ne semble pas regrouper / grouper les événements dans le temps (à quoi il ressemble sur la figure). Mais, ce qui a été demandé, c'est comment obtenir des clusters temporels? Je suis juste curieux, car je travaille sur des trucs de clustering temporel.
RussellB
3

Votre problème ressemble à celui que je regarde et cette question, qui est similaire, mais moins bien expliquée.

Leur réponse renvoie à un bon résumé sur la détection des changements. Pour des solutions possibles, une recherche rapide sur Google a trouvé un package d' analyse des points de changement sur le code Google. R dispose également de quelques outils pour ce faire. Le bcppackage est assez puissant et vraiment facile à utiliser. Si vous voulez le faire à la volée au fur et à mesure que les données arrivent, le document "Détection en ligne des points de changement et estimation des paramètres avec application aux données génomiques" décrit une approche vraiment sophistiquée, mais sachez que c'est un peu difficile. Il y a aussi le strucchangepackage, mais cela a moins bien fonctionné pour moi.

fozziethebeat
la source
1

Avez-vous vu cette page: Page de classification / regroupement de séries chronologiques UCR ?

Vous y trouverez les deux: les ensembles de données sur lesquels vous exercer et les résultats publiés - pour comparer les performances de votre propre implémentation (il existe également un lien vers les performances connues de techniques bien connues de machine learning). De plus, cette page cite une masse critique d'articles à partir desquels vous pouvez aller plus loin dans la recherche de la meilleure approche qui convient à votre problème, vos données ou vos besoins.

En outre, il existe une autre façon de le faire (potentiellement) en appliquant sequitur http: // sequitur.info. Si vous serez en mesure de normaliser / approximer correctement vos données, cela vous donnera la grammaire de ces "périodes distinctes avec des niveaux d'activité similaires", voir cet article et recherchez-en un autre, car je ne peux pas ajouter d'autres liens ...

seninp
la source
3
Pourriez-vous fournir un bref résumé des ressources disponibles sur cette page?
chl
bien sûr que je peux. à partir de là, j'ai codé mon propre classificateur
seninp
1

Je pense que vous pouvez utiliser Dynamic Time Wrapping pour rechercher des similitudes entre différentes séries chronologiques. Pour ce faire, vous devrez peut-être discrétiser votre ondelette en collections, comme un tableau. Mais la granularité serait un problème et si vous avez un grand nombre de séries chronologiques, le coût de calcul sera assez important pour calculer la distance DTM pour chaque paire d'entre elles. Vous aurez donc peut-être besoin d'une présélection pour fonctionner comme des étiquettes.

Regardez ça . Je travaille également sur une tâche comme la vôtre et cette page m'a aidé.

Yifan Guo
la source