Fit/Train HMM Classifier

class GestureRecognition.hmmclassifier.HMMClassifier

Bases: object

TODO: Implementiere einen HMM-basierten Klassifikator

Ziel:

Entwickle einen Klassifikator, der zeitliche Sequenzen mit Hilfe von Hidden-Markov-Modellen (HMMs) klassifiziert. Für HMMs können libraries wie hmmlearn benutzt werden

Grundidee:

  • Trainiere ein Modell pro Klasse

  • Bewerte neue Sequenzen anhand der Likelihood unter jedem Modell

  • Wähle die Klasse mit der höchsten Wahrscheinlichkeit

Bemerkung

Wie genau deine Modelle aussehen (z. B. Anzahl Zustände, Features, Initialisierung etc.) ist bewusst nicht vorgegeben.

Wichtige Designentscheidungen:

  • Wie strukturierst du deine Trainingsdaten?

  • Wie repräsentierst du Sequenzen?

  • Wie verbindest du mehrere Sequenzen mit Labels?

Speicherung:

Du solltest dir überlegen: - Wie speicherst du dein trainiertes Modell? - Wie lädst du es später wieder? - Welche Informationen müssen persistiert werden (z. B. Klassen, Modelle)?

Tipp

pickle ist eine einfache Möglichkeit, Modelle zu speichern. Alternativ kannst du auch eigene Formate definieren.

Evaluation:

Für sinnvolles Training solltest du unbedingt: - eine eigene train_test_split-Logik implementieren - Trainings- und Testdaten sauber trennen

Warnung

Wenn du Training und Test nicht trennst, sind deine Ergebnisse nicht aussagekräftig.

Erweiterung (optional):

  • Implementiere eine Grid Search für Hyperparameter (z. B. Anzahl Zustände, Modellstruktur)

  • Vergleiche verschiedene Modellkonfigurationen

decision_function()

TODO: Berechne Scores für jede Klasse

Ziel:

Berechne für jede Eingabesequenz einen Score pro Klasse (z. B. Log-Likelihood unter jedem Modell).

Anforderungen / Ideen:

  • Zerlege die Eingabe in einzelne Sequenzen

  • Berechne für jede Sequenz:

    Score unter jedem Klassenmodell

  • Gib eine Struktur zurück wie:

    (n_sequences, n_classes)

Tipp

Die meisten HMM-Implementierungen bieten eine score-Funktion für Likelihoods.

Bemerkung

Du entscheidest selbst:
  • Welcher Score verwendet wird

  • Wie du mehrere Sequenzen behandelst

Warnung

Stelle sicher, dass:
  • Die Reihenfolge der Klassen konsistent ist

  • Scores vergleichbar sind

returns:

scores – Score pro Sequenz und Klasse

rtype:

array-like

fit()

TODO: Trainiere den Klassifikator

Ziel:

Trainiere ein separates HMM für jede Klasse basierend auf den gegebenen Sequenzen.

Anforderungen / Ideen:

  • Zerlege die Daten so, dass du pro Klasse alle Sequenzen bekommst

  • Trainiere ein Modell pro Klasse

  • Speichere die trainierten Modelle intern

Tipp

Überlege dir eine sinnvolle Datenstruktur wie: label -> (Daten, Sequenzlängen)

Bemerkung

Die konkrete Umsetzung ist offen:
  • Wie genau du Daten aufteilst

  • Wie du dein Modell initialisierst

  • Welche Hyperparameter du verwendest

Warnung

Achte darauf, dass:
  • lengths zu X passen

  • Labels korrekt zu Sequenzen zugeordnet sind

Erweiterung:

  • Experimentiere mit verschiedenen Modellgrößen

  • Nutze eine Grid Search zur Optimierung

  • Verwende ein separates Testset zur Evaluation

rtype:

self

predict()

TODO: Sage Klassenlabels voraus

Ziel:

Weise jeder Eingabesequenz ein Label zu.

Anforderungen / Ideen:

  • Nutze deine decision_function

  • Wähle für jede Sequenz die Klasse mit bestem Score

Tipp

Typischerweise: argmax über Klassen

Bemerkung

Achte darauf, dass:
  • Klassenreihenfolge konsistent ist

  • Rückgabewerte klar interpretierbar sind

Erweiterung:

  • Gib zusätzlich Unsicherheiten oder Scores zurück

  • Implementiere Top-k Vorhersagen

returns:

labels – Vorhergesagte Labels

rtype:

list