Classer des séries chronologiques multivariées

9

J'ai un ensemble de données composé de séries chronologiques (8 points) avec environ 40 dimensions (donc chaque série temporelle est de 8 par 40). Le résultat correspondant (les résultats possibles pour les catégories) est soit 0 soit 1.

Quelle serait la meilleure approche pour concevoir un classifieur pour des séries chronologiques à plusieurs dimensions?

Ma stratégie initiale était d'extraire des caractéristiques de ces séries chronologiques: moyenne, std, variation maximale pour chaque dimension. J'ai obtenu un ensemble de données que j'ai utilisé pour former un RandomTreeForest. Conscient de la naïveté totale de cela, et après avoir obtenu de mauvais résultats, je cherche maintenant un modèle plus amélioré.

Mes pistes sont les suivantes: classer la série pour chaque dimension (en utilisant l'algorithme KNN et DWT), réduire la dimensionnalité avec PCA et utiliser un classificateur final le long des catégories multidimensions. Étant relativement nouveau en ML, je ne sais pas si je me trompe totalement.

AugBar
la source
Ce que vous faites est une assez bonne approche. Combien d'échantillons avez-vous dans votre jeu de données?
Kasra Manshaei
J'ai environ 500 000 séries chronologiques (rappelant que chaque série temporelle est de 8 horodatages * 40 dimensions)
AugBar
Avez-vous essayé d'utiliser simplement les fonctionnalités 320? 320 fonctionnalités, ce n'est pas beaucoup pour 500 000 échantillons
Jan van der Vegt
@Jan van der Vegt: J'ai essayé cette méthode en utilisant un réseau de neurones, mais les résultats n'étaient pas si convaincants - j'ai utilisé les données brutes sans aucun prétraitement. Quelles opérations dois-je appliquer au préalable sur mes raw de 320 fonctionnalités pour alimenter le classificateur?
AugBar
1
Dans le cas d'un réseau de neurones, la normalisation de votre entrée est importante, en fonction de la gamme de vos fonctionnalités qui peut être importante. Mais je voudrais simplement alimenter les fonctionnalités brutes dans une RF et voir à quel point cela fonctionne, nécessite moins de réglages pour voir si vous pouvez en tirer facilement quelque chose
Jan van der Vegt

Réponses:

5

Vous êtes sur la bonne voie. Regardez comment calculer quelques fonctionnalités supplémentaires, à la fois dans le domaine temporel et fréquentiel. Tant que le nombre d'échantillons >> le nombre de fonctionnalités, vous ne risquez pas de surcharger. Existe-t-il de la documentation sur un problème similaire? Si c'est le cas, cela fournit toujours un excellent point de départ.

Essayez un classificateur d'arborescence boosté, comme xgboost ou LightGBM. Ils ont tendance à être plus faciles à régler les hyperparamètres et à fournir de bons résultats avec les paramètres par défaut. Les classificateurs Random Forest et boosted tree peuvent renvoyer l'importance des fonctionnalités, vous pouvez donc voir quelles fonctionnalités sont pertinentes pour le problème. Vous pouvez également essayer de supprimer des fonctionnalités pour vérifier toute covariance.

Mais surtout, si vos résultats sont inattendus, assurez-vous que votre problème est correctement défini. Vérifiez manuellement vos résultats pour vous assurer qu'il n'y a pas de bogues dans votre pipeline.

mpotma
la source
6

Si vous êtes en Python, il existe quelques packages qui peuvent extraire automatiquement des centaines ou des milliers de fonctionnalités de votre série temporelle, les corréler avec vos étiquettes, choisir les plus importantes et former des modèles pour vous.

https://github.com/blue-yonder/tsfresh

https://github.com/rtavenar/tslearn

Docteur J
la source
2

Vous pouvez ajouter plus de fonctionnalités à votre jeu de données comme ci-dessous.

  1. Vous pouvez essayer le package nolds si vos données proviennent d'un processus hautement non linéaire.

  2. max, min, moyenne, asymétrie, kurtosis, et si possible quelques statistiques de roulement.

Je travaille sur quelque chose de similaire et j'ai posé une question connexe .

Anurag Upadhyaya
la source
1

Je suis d'accord avec Jan van der Vegt, la normalisation (par exemple, [-1, 1]) ou la normalisation N (0, 1) combinée avec la fonction d'activation peut être très importante avec les réseaux de neurones. Je vérifierais la thèse de Pichaid Varoonchotikul: «Prévision des crues à l'aide de réseaux de neurones artificiels» pour les tenants et aboutissants des RNA. Il a des mises en garde très intéressantes. Quoi qu'il en soit, je suis habitué à essayer d'abord sans, mais lorsque les résultats ne sont pas satisfaisants, j'ai l'habitude de faire des essais avec les deux. Je ne suis pas sûr que cela aidera, mais je vérifierais le package R TSclust et les documents associés. Les auteurs sont très aimables et ils vous aideront à trouver des modèles spécifiques pour ce faire. Ce sont des experts des analyses de séries chronologiques! Bonne chance!

Rafa M. Mas
la source