Si prega di vedere il mio commento sopra e questa è la mia risposta in base a ciò che ho capito dalla tua domanda:
Come affermato correttamente, non è necessario il clustering ma la segmentazione . In effetti stai cercando Punti di cambiamento nelle tue serie storiche. La risposta dipende davvero dalla complessità dei tuoi dati. Se i dati sono semplici come nell'esempio precedente, puoi usare la differenza di vettori che si alza in corrispondenza dei punti che cambiano e impostare una soglia che rileva quei punti come sotto:
Come vedi ad esempio una soglia di 20 (es.dx<−20 e dx>20) rileverà i punti. Naturalmente per dati reali è necessario indagare di più per trovare le soglie.
Pre-processing
Si noti che esiste un compromesso tra la posizione accurata del punto di cambio e il numero esatto di segmenti, ad esempio se si utilizzano i dati originali si troveranno i punti di cambio esatti ma l'intero metodo è sensibile al rumore, ma se si liscia i tuoi segnali prima potresti non trovare i cambiamenti esatti ma l'effetto del rumore sarà molto inferiore come mostrato nelle figure seguenti:
Conclusione
Il mio suggerimento è di regolare prima i segnali e scegliere un mthod di clustering (ad es. Utilizzando GMM ) per trovare una stima accurata del numero di segmenti nei segnali. Date queste informazioni, è possibile iniziare a trovare punti di modifica vincolati dal numero di segmenti trovati dalla parte precedente.
Spero che tutto abbia aiutato :)
In bocca al lupo!
AGGIORNARE
Fortunatamente i tuoi dati sono piuttosto semplici e puliti. Consiglio vivamente algoritmi di riduzione della dimensionalità (ad es. Semplice PCA ). Immagino che riveli la struttura interna dei tuoi cluster. Una volta applicato il PCA ai dati, è possibile utilizzare k-mean molto più facilmente e con maggiore precisione.
Una soluzione seria (!)
Secondo i tuoi dati, vedo che la distribuzione generativa di diversi segmenti è diversa, il che è una grande opportunità per segmentare le tue serie storiche. Vedi questo (originale , archivio , altra fonte ) che è probabilmente la soluzione migliore e più all'avanguardia al tuo problema. L'idea principale alla base di questo documento è che se diversi segmenti di una serie temporale sono generati da diverse distribuzioni sottostanti è possibile trovare tali distribuzioni, impostare tham come verità di base per il proprio approccio al clustering e trovare cluster.
Ad esempio, supponi un lungo video in cui nei primi 10 minuti qualcuno è in bicicletta, nei secondi 10 minuti che corre e nel terzo è seduto. puoi raggruppare questi tre diversi segmenti (attività) usando questo approccio.