Técnicas de agrupamento apropriadas para dados temporais?

13

Eu tenho dados temporais de frequências de atividade. Quero identificar clusters nos dados que indicam períodos distintos de tempo com níveis de atividade semelhantes. Idealmente, quero identificar os clusters sem especificar o número de clusters a priori.

Quais são as técnicas de clustering apropriadas? Se minha pergunta não contém informações suficientes para responder, quais são as informações que eu preciso fornecer para determinar as técnicas de cluster apropriadas?

Abaixo está uma ilustração do tipo de dados / cluster que estou imaginando: agrupando através do tempo

histelheim
fonte
A trama parece suavizada (interpolada) para mim. Provavelmente isso é enganoso. E "longitudinal" eu associei com dados geográficos, mas aparentemente você está olhando para uma série temporal?
Quit - Anony-Mousse
1
Não preste muita atenção no enredo, é apenas um exemplo. O que eu quero alcançar é a identificação de episódios distintos de tempo com base em variáveis ​​que variam ao longo do tempo. Longitudinal, em minha mente, é o mesmo que dados temporais, ver, por exemplo en.wikipedia.org/wiki/Longitudinal_study
histelheim
Como no cluster, você verá esse termo principalmente como en.wikipedia.org/wiki/Longitude - da sua pergunta, não está claro o que você deseja agrupar. Você pode agrupar, por exemplo, intervalos de tempo que se comportam de maneira semelhante entre "assuntos" ou assuntos que mostram o mesmo progresso ao longo do tempo.
QuIT - Anony-Mousse
1
Mudei 'longitudinal' para 'temporal' para evitar confusão. Usando suas palavras, acho que quero agrupar intervalos de tempo . No entanto, é importante para mim que os agrupamentos sejam episódios distintos e contínuos no tempo.
histelheim
Pesquisas com palavras-chave "segmentação de séries temporais" ou "modelos de troca de regime" podem ajudá-lo.
Yves

Respostas:

6

De minha própria pesquisa, parece que os modelos gaussianos de Markov oculto podem ser uma boa opção: http://scikit-learn.org/stable/auto_examples/plot_hmm_stock_analysis.html#example-plot-hmm-stock-analysis-py

Definitivamente parece encontrar episódios distintos de atividade.

Modelo de Markov oculto gaussiano

histelheim
fonte
Você não precisa saber quantos estados ocultos existem com antecedência? Existe uma maneira de contornar isso?
JCWong
@JCWong Eu acho que você pode usar uma variante bayesiana não paramétrica (o modelo infinito de Markov oculto) para evitar isso.
jtobin
Depois de muito tempo: o HMM parece não agrupar / agrupar eventos temporalmente (o que parece na figura). Mas, o que foi perguntado é como obter clusters temporais? Estou curioso, pois estou trabalhando em coisas de agrupamento temporal.
precisa saber é o seguinte
3

Seu problema parece semelhante ao que estou vendo e esta pergunta é semelhante, mas menos bem explicada.

A resposta deles é um bom resumo sobre a detecção de alterações. Para possíveis soluções, uma rápida pesquisa no Google encontrada encontrou um pacote de Análise de ponto de alteração no código do Google. R também possui algumas ferramentas para fazer isso. O bcppacote é bastante poderoso e muito fácil de usar. Se você quiser fazer isso rapidamente, à medida que os dados chegarem, o artigo "Detecção on-line de pontos de mudança e estimativa de parâmetros com aplicação a dados genômicos" descreve uma abordagem realmente sofisticada, embora seja avisado de que é um pouco desafiador. Há também o strucchangepacote, mas isso tem funcionado tão bem para mim.

fozziethebeat
fonte
1

Você já viu esta página: Página de classificação / agrupamento de séries temporais UCR ?

Lá você encontra os dois: os conjuntos de dados para praticar e os resultados publicados - para comparar o desempenho de sua própria implementação (também há um link sobre o desempenho conhecido de técnicas conhecidas de aprendizado de máquina). Além disso, esta página está citando uma massa crítica de papéis a partir da qual você poderia ir mais longe na pesquisa para obter a melhor abordagem que se adapte ao seu problema, dados ou necessidades.

Além disso, há outra maneira de fazer isso (potencialmente) pela aplicação do sequitur http: // sequitur.info. Se você conseguir normalizar / aproximar bem seus dados, ele fornecerá sua gramática daqueles "períodos distintos de tempo com níveis de atividade semelhantes". Consulte este documento e procure outro, pois não consigo adicionar mais links ...

seninp
fonte
3
Você poderia fornecer um breve resumo dos recursos disponíveis nesta página?
chl
claro que eu posso. a partir daí eu codificado meu próprio classificador
seninp
1

Acho que você pode usar o Dynamic Time Wrapping para procurar semelhanças entre diferentes séries temporais. Para fazer isso, pode ser necessário discretizar sua wavelet em coleções, como uma matriz. Mas a granularidade seria um problema e, se você tiver um grande número de séries temporais, o custo da computação será muito grande para calcular a distância do DTM para cada par deles. Portanto, você pode precisar de uma pré-seleção para trabalhar como etiquetas.

Veja isso . Também estou trabalhando em alguma tarefa como a sua e esta página me ajudou um pouco.

Yifan Guo
fonte