Wie vergleiche ich Merkmale zweier Kurven?


11

Ich muss zwei Kurven f (x) und g (x) vergleichen. Sie liegen im gleichen x-Bereich (z. B. -30 bis 30). f (x) kann einige scharfe Spitzen oder glatte Spitzen und Täler aufweisen. g (x) kann die gleichen Spitzen und Täler haben. Wenn ja, möchte ich messen, wie gut diese Merkmale ohne Sichtprüfung übereinstimmen. Ich habe versucht, dieses Problem folgendermaßen zu lösen.

  1. Normalisieren Sie beide Funktionen, indem Sie jeden Datenpunkt durch die Gesamtfläche der Funktion teilen. Jetzt ist der Bereich der normalisierten Funktion 1.0
  2. Bei jedem x erhalten Sie den Minimalwert aus f (x) und g (x). Dies gibt mir eine neue Funktion, die im Grunde der Überlappungsbereich zwischen f (x) und g (x) ist.
  3. Wenn ich die resultierende Funktion von Schritt 2 integriere, erhalte ich die gesamte Überlappungsfläche von 1,0

Dies sagt mir jedoch nicht, ob die Gipfel und Täler zusammenfallen oder nicht. Ich bin nicht sicher, ob dies möglich ist, aber wenn jemand eine Methode kennt, würde ich mich über Ihre Hilfe freuen.

== EDIT == Zur Verdeutlichung habe ich ein Bild beigefügt.

Beispielkurven

Der Unterschied zwischen den beiden Kurven (schwarz und blau) ist möglicherweise nicht gleich, hat jedoch komplementäre Formen.

Hintergrund: Die Funktionen sind projizierte Zustandsdichte (PDOS) von Atomorbitalen einer Verbindung. Ich habe also Zustände für s-, p- und d-Orbitale. Ich möchte feststellen, ob das Material sp-, pd- oder dd-Hybridisierungen aufweist (Orbitalmischung). Die einzigen Daten, die ich habe, sind die PDOS. Wenn beispielsweise das PDOS des s-Orbitals (Funktion f (x)) die Spitzen und Täler wie bei den gleichen Energien (x-Werten) des PDOS des p-Orbitals (Funktion g (x)) aufweist, wird in diesem Material sp gemischt.


1
Vielleicht nehmen Sie es zu mathoverflow.net ?
Euphoric

1
Ich frage mich, ob die Leute mit digitalem Audio ähnliche Probleme haben.
Dan Pichelman

Danke Euphoric, ich werde die Frage auch auf mathoverflow.net stellen
laalee

@laalee Bitte stellen Sie Ihre Frage nicht auf mehr als einer Site im Stack Exchange-Netzwerk. Auch Math Overflow ist Mathematik auf Forschungsniveau. Math Stack Exchange ist kein Forschungsniveau. Ich kann dies nach Math oder woanders migrieren, wenn Sie möchten.
Weltingenieur

Ich entschuldige mich. Ich habe versucht, es in mathoverflow zu löschen, aber ich konnte keinen Weg finden. Ich würde mich freuen, wenn Sie es löschen könnten. Danke
Laalee

Antworten:


4

Dies ist ein häufiges und oft schwieriges Problem in der analytischen Chemie, Physik, Spektroskopie usw. Die verwendeten Ansätze können vom einfachen RMSD-Vergleich bis zu sehr ausgefeilten Methoden reichen. Wenn die Aufgabe durch visuelle Inspektion nicht einfach zu erledigen ist (Menschen sind für die Erkennung von Merkmalen exquisit entwickelt), ist es wahrscheinlich schwierig, sie rechnerisch zu erledigen.

Ein Ansatz besteht darin, zu versuchen, die "Basislinien" so zu entfernen, dass die Funktionen nullwertig sind, es sei denn, es gibt Spitzen- oder Talmerkmale. Dies geschieht am besten mit der Kurvenanpassung unter Verwendung eines Polynoms niedriger Ordnung oder, noch besser, eines geeigneteren prinzipiellen Modells, wie die Basislinie aussehen kann und sollte. Wenn die Spitzen sehr scharf sind, können Sie einfach die Funktion glätten und die geglättete Funktion von der ursprünglichen Funktion subtrahieren.

Nach dem Entfernen der Grundlinie können Sie Residuen normalisieren und generieren oder RMSD (einfache Ansätze) durchführen oder versuchen, Peak- / Talmerkmale zu erkennen, indem Sie jedem gewünschten Merkmal einen Gaußschen Wert (oder ein geeignetes Modell) anpassen. Wenn Sie in der Lage sind, die Peaks anzupassen, können Sie die Peakpositionen und Halbwertsbreiten vergleichen.

Schauen Sie sich SciPy an, wenn Sie Python kennen. Viel Glück.


Danke für deine Antwort. Ich bin mir jedoch nicht sicher, wie ich eine Basislinie finden soll. Jeder Fall wird eine andere Funktion haben, die ich nicht im Voraus vorhersagen kann.
Laalee

3

Dies ist nur "aus dem Kopf", so dass ich das Problem möglicherweise völlig falsch verstehe , aber vielleicht können Sie den Funktionen einen quadratischen Mittelwertabstand (RMSD) zuweisen. Wenn Sie nur an den Gipfeln und Tälern interessiert sind, wenden Sie sie auf Bereiche um diese Gipfel und Täler an (dh für einige x +/- einige Epsilons, bei denen die Ableitung einer der beiden Funktionen Null ist). Wenn der RMSD dieses Bereichs nahe Null ist, haben Sie eine gute Übereinstimmung, denke ich.


Dies berücksichtigt Unterschiede zwischen Werten, die möglicherweise nicht Null sind, obwohl die Formen ähnlich sind.
Laalee

3

Wie ich es nicht verstehe, werden die Informationen, nach denen Sie suchen, durch das „Tableau des Variationen“ der Funktion vermittelt - es tut mir sehr leid, dass ich den englischen Namen dafür nicht kenne!

Diese Tabelle ist einer differenzierbaren Funktion f zugeordnet, und Sie konstruieren sie, indem Sie die Wurzeln von f 'finden und das Vorzeichen von f' in jedem Intervall zwischen diesen Nullen bestimmen .

Wenn also die Nullen von f ' und g' mehr oder weniger übereinstimmen und die Vorzeichen dieser Funktionen übereinstimmen, haben sie ein ähnliches Profil.

Das erste, was ich zu programmieren versuchen würde, wäre:

  1. Wählen Sie ein kleines ε
  2. Zeichnen Sie zufällig eine große Anzahl N von Punkten x [i] in dem Intervall, in dem die Funktionen definiert sind.

  3. Berechnen Sie für jeden Knoten die Differenzen F [i] = f (x [i] + ε) - f (x [i] - ε) und G [i] = g (x [i] + ε) - g (x [i] - ε) .

  4. Wenn an jedem Knoten F [i] und G [i] beide kleiner als ε² sind ODER beide das gleiche Vorzeichen haben, schließen Sie, dass die beiden Funktionen nahezu das gleiche Profil haben.

Funktioniert es?


Danke michipili für deine aufschlussreiche Antwort. Derzeit versuche ich, eine Frist einzuhalten. Aber ich werde dies so bald wie möglich umsetzen und Sie wissen lassen
Laalee

1

Brute Force: Finden Sie den kleinsten Float-Wert ungleich Null mit diesem Wert als Schritt heraus, gehen Sie die gesamte Domäne durch und prüfen Sie, ob die Werte gleich sind.

== EDIT ==

Hmmm ... Wenn Sie mit "derselben Form" g (x) = c * f (x) meinen, sollte diese Lösung geändert werden - für jedes Element der Domäne berechnen Sie f (x) / g (x) und prüfen, ob Das Ergebnis ist für jeden Punkt das gleiche (natürlich, wenn g (x) == 0 ist, dann überprüfen Sie, ob f (x) == 0 ist, Sie versuchen nicht zu teilen).

Wenn "dieselbe Form" bedeutet, dass "lokale Optima und Biegepunkte gleich sind" ... Suchen Sie lokale Optima und Biegepunkte für f (x) und g (x) (als Sätze von Domänenelementen) und überprüfen Sie, ob diese vorhanden sind Sätze sind gleich.

Dritte Option: f (x) = g (x) + c. Überprüfen Sie einfach, ob jedes Element der Domäne den gleichen Unterschied f (x) -g (x) aufweist. Es ist fast identisch mit dem ersten Fall, aber anstelle der Teilung gibt es Unterschiede.

== NOCH EINE ANDERE BEARBEITUNG ==

Nun ... Der zweite Ansatz aus der obigen Bearbeitung kann nützlich sein. Sie können es auch mit dem Vergleichszeichen des ersten Derivats zusammenführen (nicht symbolisch, sondern berechnet als df (x) = f (x) - f (x-Schritt)). Wenn beide Funktionen in der gesamten Domäne das gleiche Vorzeichen der Ableitung haben, überprüfen Sie die Optima und Biegepunkte, um sicherzugehen. Ich würde sagen, diese Bedingungen sollten ausreichen, um das zu tun, was Sie brauchen.


Danke Filip für deine Antwort. Die Funktionen haben jedoch möglicherweise nicht die gleichen Werte, sondern die gleiche Form.
Laalee

Ich verschiebe diesen Kommentar, um ihn als Bearbeitung zu beantworten. Hör zu.
Filip Malczak

Danke Filip für deine Antwort. Ich habe ein Bild hinzugefügt, um mein Problem zu klären.
Laalee

1

Wie gut stimmen diese Merkmale ohne Sichtprüfung überein?

Der wahrscheinlich einfachste Weg ist die Berechnung des Pearson-Korrelationskoeffizienten . Verwenden Sie also Ihr f (x) als X und g (x) als Y. Zeichnen Sie effektiv g (x) als Funktion von f (x) und sehen Sie, wie gut es eine gerade Linie bildet.

Der Korrelationskoeffizient ist beliebt, weil er leicht zu berechnen ist und oft nur durch winkende Hände gerechtfertigt wird. Es mag für einige Anwendungen eine gute anfängliche Annäherung sein, ist aber definitiv kein Allheilmittel.

Um in realen Anwendungen bessere Ergebnisse zu erzielen, müssen Sie verstehen, was in den Daten vor sich geht, dh in welchem ​​Prozess die Daten generiert werden. Oft gibt es eine Art Hintergrund , und die interessanten Funktionen spielen auf diesem Hintergrund. Wenn Sie die gesamten Daten in eine Black Box werfen, werden Sie möglicherweise hauptsächlich die Hintergründe vergleichen: Die Black Box weiß nicht, welcher Teil der Daten der interessante Teil ist. Um bessere Ergebnisse zu erzielen, ist es oft eine gute Idee, die Hintergründe irgendwie zu entfernen und dann zu vergleichen, was Sie übrig haben. Anpassen von Linien oder Kurven oder Durchschnittswerten und Subtrahieren oder Dividieren durch diese, Tief-, Band- oder Hochpassfilterung, Zuführen der Daten durch eine nichtlineare Funktion ... Sie nennen es.

Es gibt definitiv keine richtige Antwort. Sie erhalten so viele verschiedene Ergebnisse, wie Sie Methoden ausprobieren. Einige der Ergebnisse sind jedoch besser als einige Angebote. Theoretische Überlegungen können helfen, in die richtige Richtung zu starten, aber wie Sie Parameter einstellen und Ihre Methode optimieren können, können Sie letztendlich nur herausfinden, indem Sie sie ausprobieren und die tatsächlichen Ergebnisse vergleichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.