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:
machine-learning
clustering
histelheim
fonte
fonte
Respostas:
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.
fonte
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
bcp
pacote é 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 ostrucchange
pacote, mas isso tem funcionado tão bem para mim.fonte
Wavelets pode ajudar a identificar períodos com propriedades diferentes. No entanto, não tenho certeza se existem métodos que dividiriam suas séries temporais em períodos discretos para você. E parece que há muita teoria a ser analisada, da qual estou apenas no começo. Estou ansioso para ler outras sugestões ..
Um capítulo introdutório gratuito do livro sobre wavelets.
Um pacote R para teste de significância com wavelets.
fonte
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 ...
fonte
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.
fonte