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:
machine-learning
clustering
histelheim
la source
la source
Réponses:
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.
la source
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
bcp
package 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 lestrucchange
package, mais cela a moins bien fonctionné pour moi.la source
Les ondelettes pourraient vous aider à identifier les périodes aux propriétés différentes. Cependant, je ne sais pas s'il existe des méthodes qui diviseraient votre série temporelle en périodes distinctes pour vous. Et il semble qu'il y ait beaucoup de théorie à parcourir, dont je ne suis qu'au début. J'ai hâte de lire d'autres suggestions ..
Un chapitre d'introduction gratuit sur les ondelettes.
Un package R pour les tests de signification avec des ondelettes.
la source
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 ...
la source
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é.
la source