1

Ich trainiere HMMs in JaHMM mit Sensordaten von einem Beschleunigungsmesser und einem Gyroskop aus einem Android Wearable implementiert implementiert.Klassifizierung HMM Gyroskop Daten Jahmm Kann nicht lernen, Modell

Das mit Beschleunigungssensordaten trainierte HMM gibt fein gelernte Zustände aus und hat eine einigermaßen akzeptable Fehlerrate.

Sowohl HMMs wie folgt initialisiert:

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); 

Ausgang für HMM mit Beschleunigungs-Daten trainiert:

HMM mit 2 Zustand (s)

Zustand 0 Pi: 0,5000000000000188 Aij: 0,5 0,5 Opdf: Multivariate Gaußsche Verteilung --- Mittelwert: [0,036 -0,051 0,075]

State 1 Pi: 0,5000000000000188 Aij: 0,5 0,5 Opdf: Multivariate Gaußschen Verteilung --- Mittelwert: [0,036 -0,051 0,075]

jedoch das HMM mit Gyroskop ausgebildeten Daten können Die Zustände des HMM scheinen nicht zu zählen, wie viele Trainings-Iterationen ich probiert habe (500 Iterationen). Die z.B. gelernt Zustandswahrscheinlichkeiten nur NaN

Ausgang für HMM mit Gyroskop Daten trainiert:

HMM mit 2 Zustand (e)

Zustand 0 Pi: NaN Aij:? ? Opdf: Multivariate Gaußverteilung - Mittelwert: [? ? ? ]

Zustand 1 Pi: NaN Aij:? ? Opdf: Multivariate Gaußverteilung - Mittelwert: [? ? ? ]

Was könnte die Ursache für dieses Verhalten sein? Gibt es einen Vorverarbeitungs- oder Normalisierungsschritt, den ich durchführen muss, bevor die Daten im HMM verwendbar sind? Ist die Anzahl der Zustände im HMM nicht ausreichend? Ich habe es mit fünf Zuständen versucht, aber es ergibt dasselbe Ergebnis. https://gist.github.com/Gudui/91d2c6b2452f1ea6a5c925b1eed9b40c

für Gyroskop Ein Ausschnitt aus der Trainingsdatei kann hier gesehen:

Ein Ausschnitt aus der Trainingsdatei für Beschleunigungssensor kann hier gesehen werden https://gist.github.com/Gudui/987cc1c1a7c0311a03988b818e7cbbcb

Für beide Trainingsdateien, wobei jede Zeile darstellen eine Trainingssequenz.

Die Bibliothek finden Sie hier: https://github.com/tanjiti/jahmm

Vielen Dank im Voraus!

+0

ich auf Ihren Daten nur raten bin von der Suche -. Aber 2 Dinge Sie sollten versuchen: (1) Init die Gaussians auf zufällige Werte (2) normalisieren und weiß deine Daten, das heißt, stellen Sie sicher, dass die Daten null mittlere und unkorrelierte Koordinaten haben (zB durch PCA) Dann versuchen Sie wieder hmm –

+0

Ich bin unsicher (1) Was meinst du? Ich werde das als Antwort akzeptieren, wenn du es erklärst. Versucht (2) und meine Gyroskopwerte normalisiert, was zu akzeptablen Ergebnissen führte. Danke! @ItamarKatz – Peter

+0

Siehe meine Antwort zu (1) –

Antwort

1

mein Kommentar Ausarbeiten, schlage ich vor:

  1. Verwenden zufällige Initialisierung des Gauß-pdf, das heißt, anstatt die Mittel Vektor [0,0,0] der Initialisierung und die Kovarianzmatrix bis 0,1-fache der Identitätsmatrix, wie Sie tun, Verwenden Sie nun basierend auf Ihren Daten einige zufällige Werte oder ein empirisches Mittel und eine Kovarianz.
  2. Whiten Ihre Daten, also sicherstellen, dass es Null-Mittelwert und Varianz in jeder Koordinate (oder sogar PCA verwenden, um die Koordinaten optimieren unkorreliert zu machen
+0

Nur ein kurzer Kommentar @Itamar Katz, was genau ist Zufallswerte für den Mittelwertvektor und die Kovarianzmatrix, und wie würde ich empirische Mittel und Kovarianz basierend auf meinen Daten extrahieren oder berechnen? – Peter

+0

das Lernen von hmm ist iterativ, Sie liefern Anfangswerte mit 'hmm.setOpdf' (ich rate, ich kenne diese Bibliothek nicht). –

Verwandte Themen