Vektoren auf Ähnlichkeit prüfen



  • Hallo,

    angenommen ich habe zwei verschiedene Vektoren (Listen mit Fließkommazahlen) und möchte prüfen ob diese gleich sind, wie geht man am besten vor?

    Jedes Element nacheinander durchgehen und auf
    a_i = b_i
    zu prüfen (a=Vektor1 und b=Vektor2, i=index) wäre sicherlich Mathematisch korrekt, bei vom Computer berechneten Werten wird dies aber wahrscheinlich nie klappen. Aufgrund von z.B. Rundungsfehlern würde ja schon der Wert 5 ungleich 5.00000000001 sein.
    Hier muss also eine "Ähnlichkeitsprüfung" her.

    Mir fällt momentan nur das Bestimmtheitsmaß ein, welches aber eigentlich nur für lineare Regressionen gültig ist.
    Was ich hier noch nicht ganz nachvollziehen kann ist die Tatsache, dass die meisten Tabellenkalkulationsprogramme auch für Polynome oder Exponentialfunktionen ein (irgend geartetes) Bestimmtheitsmaß berechnen können.

    Die Konkrete Fragestellung wäre also:
    1.) Wie prüfe ich am besten auf Ähnlichkeit?
    2.) Falls über ein Bestimmtheitsmaß, wie geht das bei beliebigen Zahlenfolgen (keine analytische Funktion)?

    Danke!



  • 1. Normen der Vektoren bestimmen und Vergleichen.
    2. Vektoren durch ihre Normen teilen.
    3. Skalarprodukt zwischen den Vektoren bilden und gucken ob es nahe 1 ist.



  • Gregor, dann findest aber, dass sich die Vektoren x und a*x für beliebiges a != 0 sehr sehr ähnlich sind. Vom OP her klingt das jetzt nicht nach dem gewünschten Verhalten.

    Mein Vorschlag wäre einfach die Norm (z.B. eine beliebige p-Norm) der Differenz als Distanzmaß zu nehmen.



  • Jester schrieb:

    Gregor, dann findest aber, dass sich die Vektoren x und a*x für beliebiges a != 0 sehr sehr ähnlich sind. Vom OP her klingt das jetzt nicht nach dem gewünschten Verhalten.

    Hmmm. Im Prinzip sollte das durch den Vergleich der Normen unter Punkt 1 verhindert werden. Aber Dein Vorschlag ist in der Tat eleganter.



  • die Norm (z.B. eine beliebige p-Norm) der Differenz

    Ist damit gemeint AB\|A-B\|, oder AB\|A\|-\|B\|?

    Wenn das Funktionieren würde wäre es super, da es total einfach zu realisieren ist. Ich frage mich nur gerade ob ich da einen festen Grenzwert festlegen kann. Ist die Differenz der Norm nicht abhängig von der Anzahl der Werte?

    Die Idee ist es auf jeden Fall wert weiter gedacht zu werden.

    Wäre es evtl. sinnvoll AB\frac{\|A\|}{\|B\|} zu betrachten?

    Danke!


  • Mod

    Nobody-86 schrieb:

    die Norm (z.B. eine beliebige p-Norm) der Differenz

    Ist damit gemeint AB\|A-B\|, oder AB\|A\|-\|B\|?

    Das erste natürlich, denn beim zweiten sind beliebige Vektoren ähnlich, wenn sie bloß die gleiche Länge haben.

    Wenn das Funktionieren würde wäre es super, da es total einfach zu realisieren ist. Ich frage mich nur gerade ob ich da einen festen Grenzwert festlegen kann.

    Es böte sich an, das mittels A+B\|A\|+\|B\| zu normieren.

    Ist die Differenz der Norm nicht abhängig von der Anzahl der Werte?

    Du meinst der Dimensionalität der Vektoren? Jain. Kommt halt drauf an, wie genau du deinen Ähnlichkeitsbegriff definierst.

    Wäre es evtl. sinnvoll AB\frac{\|A\|}{\|B\|} zu betrachten?

    Siehe Kommentar zu AB\|A\|-\|B\|.



  • Sehr interessant. Ich habe jetzt folgendes Ausprobiert:
    X=1AA+BBA+BX = 1 - \left\lVert \frac{A}{\|A+B\|} - \frac{B}{\|A+B\|} \right\rVert (P2-Norm)
    X scheint immer zwischen 0 und 1 zu liegen und besitzt bei 1 ein 100% Übereinstimmung bei 0 überhaupt keine.

    Prinzipiell ist es genau das was ich möchte. Nun stellt sich aber die Frage nach einem sinnvollen Grenzwert. Eine prozentuale Abweichung ist es nicht ganz, so dass das Gefühl für einen guten Zahlenwert fehlt. Ich habe versucht B=A*1.05 zu setzen, die "Ähnlichkeit" wird dann aber zu X=0.97561 (scheint unabhängig von Dimension und Wertegröße zu sein)


  • Mod

    Nobody-86 schrieb:

    Sehr interessant. Ich habe jetzt folgendes Ausprobiert:
    X=1AA+BBA+BX = 1 - \left\lVert \frac{A}{\|A+B\|} - \frac{B}{\|A+B\|} \right\rVert (P2-Norm)
    X scheint immer zwischen 0 und 1 zu liegen und besitzt bei 1 ein 100% Übereinstimmung bei 0 überhaupt keine.

    Quatsch. Da kommen auch jede Menge Werte unter 0 heraus. Und für A = -B passieren ganz komische Sachen. Liest du die Antworten hier im Thread überhaupt? Es wurden schon mehrere gute Lösungen vorgeschlagen, aber du schlägst dann selber immer etwas völlig anderes vor, das wir kommentieren sollen. Kombinierst du einfach zufällig ,+,,A,B\lVert, +, -, A, B bis irgendetwas zu funktionieren scheint?



  • Da kommen auch jede Menge Werte unter 0 heraus. Und für A = -B passieren ganz komische Sachen.

    An den Fall A=-B habe ich (obwohl es sofort auffallen sollte) nicht direkt gedacht. Auch das Werte unter 0 raus kommen können ist mir eben erst klar geworden. Da ich kein Mathematiker bin habe ich keinen direkten Blick für so etwas.

    Es wurden schon mehrere gute Lösungen vorgeschlagen, aber du schlägst dann selber immer etwas völlig anderes vor, das wir kommentieren sollen.

    Ich versuche nur das zu verstehen was gesagt wurde und frage nach ob ich es richtig verstanden habe.
    Meine letzte Formel bezog sich übrigens auf deinen Vorschlag:

    Es böte sich an, das mittels ||A||+||B|| zu normieren.
    

    Und während ich dies her gerade schreibe sehe ich das ich in meiner Formel einen Tippfehler gemacht habe. Ich wollte selbstverständlich nicht AA+B\frac{A}{\|A+B\|} schreiben, sondern AA+B\frac{A}{\|A\|+\|B\|} wie von dir vorgeschlagen (wenn es den so gemeint war?).

    Kombinierst du einfach zufällig ∥,+,−,A,B bis irgendetwas zu funktionieren scheint?

    Aufgrund meines Tippfehlers mag das von Außen betrachtet so aussehen. Auch die 1-... war evtl. nicht überlegt genug gewählt und mag seinen Teil dazu beitragen. Trotzdem versuche ich nur das zu verstehen was mir (Dankenderweise!) vorgeschlagen wird.

    PS:
    Mir fällt außerdem gerade auf das sich durch die Wortwahl schnell Missverständnisse ergeben können. Unter einem Vektor verstehe ich so was hier: c++ vektor reference
    Ich hätte besser das Wort "Liste" verwendet. Dementsprechend ist die "Länge" für mich die Anzahl der Listeneinträge, also das was der Mathematiker als "Dimension" bezeichnen würde.


  • Mod

    Super. Also war alles hier im Thread vollkommen umsonst, da du dich weder gescheit ausdrücken kannst, noch frühzeitig darauf aufmerksam machst, wenn du falsch verstanden wirst. Das wird sicher viele Leute zu weiterer Hilfe animieren.



  • Eigentlich hätte der erste Satz meiner Frage diesem Missverständnis vorbeugen sollen:

    Hallo,

    angenommen ich habe zwei verschiedene Vektoren (Listen mit Fließkommazahlen)

    Und darauf das wir alle aneinander vorbei geredet haben, habe ich ja auch erst jetzt festgestellt (hat aneinander vorbei reden so an sich).
    Nichtsdestotrotz danke ich für alle Anregungen die ich bisher bekommen habe. Es sind schließlich einige Dinge dabei die es wirklich wert sind weiterverfolgt zu werden.



  • AA+BBA+B\left\lVert \frac{A}{\|A\|+\|B\|} - \frac{B}{\|A\|+\|B\|} \right\rVert ist übrigens nur eine elegante Schreibweise für das von SeppJ vorgeschlagene ABA+B\frac{\left\lVert A - B \right\rVert}{\|A\| + \|B\|}.


Anmelden zum Antworten