Fit/Train HMM Classifier
- class GestureRecognition.hmmclassifier.HMMClassifier
Bases:
objectTODO: 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
hmmlearnbenutzt werdenGrundidee:
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
pickleist 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 trennenWarnung
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:
lengthszuXpassenLabels 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_functionWähle für jede Sequenz die Klasse mit bestem Score
Tipp
Typischerweise:
argmax über KlassenBemerkung
- 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