1

Je suis entrain d'entrainer des HMM implémentés en JaHMM avec des données de capteur d'un accéléromètre et un gyroscope obtenu à partir d'un portable Android.Classification Données du gyroscope HMM Jahmm Impossible d'apprendre le modèle

Le HMM entraîné avec les données de l'accéléromètre délivre des états finement appris, et a un taux d'erreur acceptable.

Les deux HMM de s'initialisés comme suit:

Hmm<ObservationVector> hmm = new Hmm<>(2, new OpdfMultiGaussianFactory(3)); 

    hmm.setPi(0, 0.5); 
    hmm.setPi(1, 0.5); 

    hmm.setOpdf(0, new OpdfMultiGaussian(
      new double[]{0,0,0}, 
      new double[][] {{0.1,0,0}, 
          {0,0.1,0}, 
          {0,0,0.1} 
      })); 
    hmm.setOpdf(1, new OpdfMultiGaussian(
      new double[]{0,0,0}, 
      new double[][] {{0.1,0,0}, 
          {0,0.1,0}, 
          {0,0,0.1} 
          })); 


    hmm.setAij(0, 0, 0.5); 
    hmm.setAij(0, 1, 0.5); 

    hmm.setAij(1, 0, 0.5); 
    hmm.setAij(1, 1, 0.5); 

sortie pour HMM formé avec les données de l'accéléromètre:

HMM avec 2 état (s)

Etat 0 Pi: ,5000000000000188 Aij: 0.5 0.5 Opdf: Distribution gaussienne multi-variée --- Moyenne: [0.036 -0.051 0.075]

État 1 Pi: ,5000000000000188 Aij: 0,5 0,5 OPDF: distribution gaussienne multivariée --- Mean: [0,036 -0,051 0,075]

Cependant, le HMM formé avec gyroscopique données peuvent ne semblent pas apprendre les états du HMM, quel que soit le nombre d'itérations d'entraînement que j'ai essayé (500 itérations). Le p. probabilités d'état acquises est juste NaN

sortie pour HMM formé avec les données gyroscopique:

HMM avec 2 état (s)

Etat 0 Pi: NaN Aij: ? Opdf: Distribution gaussienne multi-variée --- Moyenne: [? ? ? ]

État 1 Pi: NaN Aij:? ? Opdf: Distribution gaussienne multi-variée --- Moyenne: [? ? ? ]

Quelle pouvait être la cause de ce problème? Existe-t-il une étape de prétraitement ou de normalisation que je dois effectuer avant que les données soient utilisables dans le HMM? Le nombre d'états dans le HMM est-il insuffisant? J'ai essayé avec cinq états, mais cela donne le même résultat.

Un extrait du fichier de formation pour accéléromètre peut être vu ici: https://gist.github.com/Gudui/91d2c6b2452f1ea6a5c925b1eed9b40c

Un extrait du fichier de formation pour gyroscopique peut être vu ici: https://gist.github.com/Gudui/987cc1c1a7c0311a03988b818e7cbbcb

Pour les deux fichiers de formation, chaque ligne représentent une séquence d'entraînement.

La bibliothèque est disponible ici: https://github.com/tanjiti/jahmm

Merci à l'avance!

+0

Je suis juste deviner en regardant vos données -. Mais 2 choses vous devriez essayer: (1) init les gaussiennes à des valeurs aléatoires (2) normaliser et blanchir vos données, c'est-à-dire s'assurer que les données ont zéro coordonnées moyennes et non corrélées (par exemple par PCA), puis recommencer hmm –

+0

à propos de (1) Que voulez-vous dire? Je vais accepter cela comme une réponse, si vous expliquez.Essayé (2) et normalisé mes valeurs de gyroscope, qui ont donné des résultats acceptables.Merci! @ItamarKatz – Peter

+0

Voir ma réponse à propos de (1) –

Répondre

1

Développant mon commentaire, je propose:

  1. Utiliser l'initialisation aléatoire du pdf gaussienne, qui est au lieu d'initialiser le moyen vecteur [0,0,0], et la matrice de covariance à 0,1 fois la matrice d'identité, comme vous le faites Maintenant, utilisez des valeurs aléatoires ou une moyenne empirique et une covariance basées sur vos données.
  2. Whiten vos données, qui est assurez-vous qu'il a zéro la variance moyenne et l'unité dans chaque coordonnée (ou même utiliser PCA pour faire les Coordiantes décorrélé
+0

Juste un petit commentaire @Itamar Katz, ce qui est exactement des valeurs aléatoires pour le vecteur des moyennes et la matrice de covariance, et comment extraire ou calculer les moyennes et la covariance empiriques sur la base de mes données? – Peter

+0

l'apprentissage de hmm est itératif, vous fournissez des valeurs initiales en utilisant 'hmm.setOpdf' (je devine, je ne connais pas cette bibliothèque). –