[KI] Klassifikation mit 'unärer' Trainingsmenge

Hallo Experten,

ich habe eine Trainingsmenge, bestehend aus etwa 10 Beispielen (zu je 30 Dimensionen). Die Beispiele sind übrigens Aufnahmen von (ungefähr gleichen) Benutzerbewegungen und sollen binär klassifiziert werden nach „ist Bewegung X“ bzw. „ist nicht Bewegung X“.

Das Problem ist, das sind alles positive Trainingsbeispiele; ich weiss also, wie gute Beispiele aussehen, kann sie aber nicht von Gegenbeispielen abgrenzen. Darum weiss ich auch nicht, wie ich die herkömmlichen Techniken wie Neuronale Netze oder Support Vector Machines einsetzen könnte, die Abgrenzungen suchen.

Jetzt könnte ich natürlich negative Beispiele erschaffen, indem ich einfach ein Dutzend „falsche Bewegungen“ ausführe. Nur, das garantiert mir keine wirkliche gute Trennung von meinen Positivbeispielen, die ich nicht im voraus kenne (die meinen „unsinnigen“ Bewegungen also zu sehr ähneln könnten).

Oder ich könnte einfach den 30-dim-Eingaberaum mit kalkulierten Negativbeispielen füllen (also Beispiele, die offensichtlich „ausserhalb“ meiner Trainingsmenge liegen), was zu einer Art Hülle um die Trainingsmenge führen sollte. Allerdings bräuchte ich ziemlich viele solcher kalkulierter Negativbeispiele.

Eine weitere Idee war, die Trainingsmenge einfach direkt durch ihre konvexe Hülle abzugrenzen. Das fällt (mMn) dann aber nicht mehr unter Machine Learning, was aber eigentlich das Ziel war…

Hat jemand eine Idee, wie ich da ansetzen soll? Ich bin für alle Anregungen dankbar, ich sitz da schon ewig dran und finde nichts Gutes…

Mit freundlichen Grüssen,
kvida

Hallo,
ohne einen Bewertungsrahmen für deine Bewegungen wirst du wenig erreichen können. D.h. man sollte eine Bewegung in Abschnitte teilen und dann z.B. Abweichungen negativ bewerten, desto gravierender die Abweichung ist, desto höher die negative Bewertung je Abschnitt. Wichtige Abschnitte sind dabei nochmal höher zu bewerten als nicht so wichtige.
Lernen kann das System durch viele Beispiele und z.B. Anfangsbewertungen von außen, die sich nicht nur auf ja und nein beschränken, sondern zusätzlich mit einer Bewertungsskala z.B. Skala 1-20.
1-5 alles super 6-10 leichte bis mittlere Fehler, 11-16 mittlere bis schwere Fehler, 17-20 gravierende Fehler.
Dann kann das System lernen seine Abschnitte bewerten zu können und zusätzlich über die Bewertung der Abschnitte, den Ablauf zu bewerten.

Gruss Peter

Hallo Peter,

vielen Dank für deine Antwort.
Ich bin mir allerdings nicht sicher, ob ich das richtig verstanden habe…

  1. Du willst die Bewegung in zeitliche Abschnitte teilen, richtig? Bisher wollte ich die Merkmalsextraktion ja über ein attributbeschreibendes Modell führen, da die Bewegung an sich viel zu hochdimensional (~600 Werte) wäre, dabei würden zeitliche Informationen allerdings gestrichen.

  2. Die Abweichung bewerten - von was? Es gibt keine „ideale“ Bewegung als Vorlage, nur die 10 positiven Trainingsbeispiele, anhand derer ich die späteren Bewegungen klassifizieren soll. Natürlich könnte ich über diese Beispiele mitteln, müsste dann für eine vergleichende Bewertung aber auch für jede Dimension die Varianz berechnen, was mir dann auch nicht wesentlich besser scheint als die konvexe Hülle…

Ich wäre dir dankbar, wenn du mich da weiter erleuchten könntest! :smile:

ohne einen Bewertungsrahmen für deine Bewegungen wirst du
wenig erreichen können. D.h. man sollte eine Bewegung in
Abschnitte teilen und dann z.B. Abweichungen negativ bewerten,
desto gravierender die Abweichung ist, desto höher die
negative Bewertung je Abschnitt. Wichtige Abschnitte sind
dabei nochmal höher zu bewerten als nicht so wichtige.
Lernen kann das System durch viele Beispiele und z.B.
Anfangsbewertungen von außen, die sich nicht nur auf ja und
nein beschränken, sondern zusätzlich mit einer Bewertungsskala
z.B. Skala 1-20.
1-5 alles super 6-10 leichte bis mittlere Fehler, 11-16
mittlere bis schwere Fehler, 17-20 gravierende Fehler.
Dann kann das System lernen seine Abschnitte bewerten zu
können und zusätzlich über die Bewertung der Abschnitte, den
Ablauf zu bewerten.

Hallo,

  1. Du willst die Bewegung in zeitliche Abschnitte teilen,
    richtig? Bisher wollte ich die Merkmalsextraktion ja über ein
    attributbeschreibendes Modell führen, da die Bewegung an sich
    viel zu hochdimensional (~600 Werte) wäre, dabei würden
    zeitliche Informationen allerdings gestrichen.

Welche Informationen hast du über die Bewegungen, dass diese so vielschichtig sind? Wie erstellt du diese (über Bewegungsvektoren?)
Stellen die 600 Werte die ganze Bewegung dar oder wie darf ich diese Werte verstehen?
Dein Ansatz mit Merkmalen zu arbeiten und Varianzen (erlaubte Abweichungen) zu suchen ist an sich richtig.
Ideal muss eine Bewegung nicht sein, man kann einen Schnitt berechnen und eine Bewertung für Abweichungen dem System mitgeben. Negative Bewertungen schließen nicht aus, dass die Bewegung an sich als richtig bewertet wird. (die Grenze kann man ja durchaus regeln)
Eine konvexe Hülle kann man natürlich auch berechnen und entsprechend den Toleranzen anpassen.
Dein System läßt sich aber nur durch dich selbst kalibrieren.
10 positive Trainingsbeispiele nützen kaum etwas ohne weitere Einschränkungen. Vielleicht kannst du mir ja die Versuchsanordnung per Mail schicken.
Gruss Peter

  1. Die Abweichung bewerten - von was? Es gibt keine „ideale“
    Bewegung als Vorlage, nur die 10 positiven Trainingsbeispiele,
    anhand derer ich die späteren Bewegungen klassifizieren soll.
    Natürlich könnte ich über diese Beispiele mitteln, müsste dann
    für eine vergleichende Bewertung aber auch für jede Dimension
    die Varianz berechnen, was mir dann auch nicht wesentlich
    besser scheint als die konvexe Hülle…

Ich wäre dir dankbar, wenn du mich da weiter erleuchten
könntest! :smile:

ohne einen Bewertungsrahmen für deine Bewegungen wirst du
wenig erreichen können. D.h. man sollte eine Bewegung in
Abschnitte teilen und dann z.B. Abweichungen negativ bewerten,
desto gravierender die Abweichung ist, desto höher die
negative Bewertung je Abschnitt. Wichtige Abschnitte sind
dabei nochmal höher zu bewerten als nicht so wichtige.
Lernen kann das System durch viele Beispiele und z.B.
Anfangsbewertungen von außen, die sich nicht nur auf ja und
nein beschränken, sondern zusätzlich mit einer Bewertungsskala
z.B. Skala 1-20.
1-5 alles super 6-10 leichte bis mittlere Fehler, 11-16
mittlere bis schwere Fehler, 17-20 gravierende Fehler.
Dann kann das System lernen seine Abschnitte bewerten zu
können und zusätzlich über die Bewertung der Abschnitte, den
Ablauf zu bewerten.

1 Like

Hallo Peter,

vielen Dank noch einmal für die schnelle Antwort.

Welche Informationen hast du über die Bewegungen, dass diese
so vielschichtig sind? Wie erstellt du diese (über
Bewegungsvektoren?)
Stellen die 600 Werte die ganze Bewegung dar oder wie darf ich
diese Werte verstehen?

Die 600 Werte stellen die mit hoher Frequenz abgefragten Koordinaten der Hand innerhalb von 2-3 Sekunden dar. Natürlich sind die massiv redundant, aber so ganz blind „5 von 6 Werten wegschmeissen“ geht ja auch nicht (ist aber ein anderes Problem).

Meine Vorgaben sind wie folgt:
a) Positive Trainingsmenge wie beschrieben zum Einüben einer Bewegung, Merkmalsextraktion meiner Wahl.
b) Verwendung von NN (oder ähnlichem Maschinenlernverfahren)

Das Problem war eben, dass ich b) nicht „wie gehabt“ einsetzen kann, wenn ich keine Negativmenge habe, da das System von sich aus keine Entscheidungsgrenzen ziehen kann.
Mit Mitteln und einer entsprechenden Kovarianzmatrix könnte ich allerdings diese Entscheidungsgrenze über NN+Genetische Algorithmen ziehen, wenn ich die Varianz als Fitnessfunktion benutze… glaube ich. :smile: (Gleich mal nachprüfen.)

Eine grossartige Versuchsanordnung gibt es leider nicht. Wie gesagt, die Hardware gibt mir mit n×100 Hz die aktuellen Koordinaten direkt in den Programmcode.

Wenn du Lust und Zeit hast, können wir uns natürlich auch gern per Mail oder IM weiter unterhalten, Daten dann aber bitte per Mail. :wink:

Auf jeden Fall schon mal vielen Dank!

kvida

Hi Kvida,
ein Versuch wäre einfache Funktionen durch die Punkte zu legen.
z.B. im Dreidimensionalen:
für Koordination (x,y,z)
fx(t), fy(t), fz(t) auf einer Zeitlinie t. Interessant dabei ist, dass man durch Streckungsfaktoren auf t bessere Vergleichsmöglichkeiten über einen ähnlichen Bewegungsablauf, aber unterschiedlichem Tempo erreichen könnte. Dieser Streckungsfaktor könnte auch Abschnittsweise varieren.
Danach sollte man eine Varianz für die Funktionen zu einem Zeitpunkt t festlegen und schauen ob die Funktionen durch eine Änderung des Streckungsfaktors immer noch in Ordnung ist.
Bei nur positiven Beispielen liegt es an dir festzumachen wie groß
die Abweichung sein darf.
Du kannst mir gerne mehr Infos zukommen lassen.
Hört sich interessant an :smile:
Gruss Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]