Algorithme de normalisation en temps réel des données de séries chronologiques?

12

Je travaille sur un algorithme qui prend un vecteur du point de données le plus récent d'un certain nombre de flux de capteurs et compare la distance euclidienne aux vecteurs précédents. Le problème est que les différents flux de données proviennent de capteurs complètement différents, donc prendre une simple distance euclidienne surestimera considérablement certaines valeurs. De toute évidence, j'ai besoin d'un moyen de normaliser les données. Cependant, puisque l'algorithme est conçu pour fonctionner en temps réel, je ne peux pas utiliser d'informations sur un flux de données dans son ensemble dans la normalisation. Jusqu'à présent, je viens de suivre la plus grande valeur observée pour chaque capteur dans la phase de démarrage (les 500 premiers vecteurs de données), puis de diviser toutes les données futures de ce capteur par cette valeur. Cela fonctionne étonnamment bien, mais semble très inélégant.

Je n'ai pas eu beaucoup de chance pour trouver un algorithme préexistant pour cela, mais peut-être que je ne cherche tout simplement pas aux bons endroits. Quelqu'un en connaît-il un? Ou avez-vous des idées? J'ai vu une suggestion d'utiliser une moyenne courante (probablement calculée par l'algorithme de Wellford), mais que si je le faisais, plusieurs lectures de la même valeur ne se présenteraient pas comme étant identiques, ce qui semble être un assez gros problème, sauf si je manque quelque chose. Toutes les pensées sont appréciées! Merci!

seaotternerd
la source

Réponses:

1

D'après votre question, je comprends que vous cherchez à:

  1. Trouvez un moyen qui normalise la contribution des données de chaque capteur.
  2. Vérifiez si le nouveau point de données est très différent des points précédents.

Voici où je commencerais

1.Pour votre première question: supprimer la moyenne et le blanchiment est ce que vous recherchez. Une transformation de blanchiment garantit que vos fonctionnalités sont toutes dans la même plage dynamique.

Je ferai quelques hypothèses simplificatrices qui peuvent être parfaitement pertinentes mais qui conviennent parfaitement comme point de départ sur lequel s'appuyer.

En supposant que vos données soient unimodales, qu'elles aient une seule moyenne prononcée. Je commencerais par soustraire la moyenne des données et effectuer une transformation de blanchiment (probablement PCA, peut-être ZCA selon vos données)

Si vous voulez le faire en temps réel, j'utiliserais un nombre d'échantillons en cours d'exécution qui effectue le blanchiment sur une fenêtre mobile. Assurez-vous que vous avez suffisamment d'échantillons pour que votre blanchiment soit précis (le blanchiment a besoin que la matrice de covariance soit inversible et pour cela vous avez besoin de plus d'échantillons temporels que vos capteurs).

Maintenant, si vos données ne sont pas unimodales, je regrouperais probablement les données pour voir où résident les modes. À la base, pour chaque nouveau point arrivant, je l'assiégerais au cluster approprié et je partirais de là.

Pour mesurer efficacement une distance à partir de points passés, j'utiliserais la distance de Mahalanobis . En réalité, la distance de Mahalanobis est à peu près la distance euclidienne dans l'espace blanchi.

En résumé, veuillez lire sur le blanchiment et la distance entre les Mahalanobis, je pense que ceux-ci vous orienteront dans la direction que vous recherchez.

rhadar
la source