Extremwerte (Maxima und Minima)



  • hallo,

    ich habe nun folgendes "Problem":
    in einer Datenbank stehen rund 3000 Werte. Wie kann man jetzt in relation zu
    jeweils den anderen Daten sagen: Dies ist ein Extremwert. Leider gibt es bei
    google dann immer nur die Lösung zur Berechnung der Extrema mit Formel (f(x),
    f'(x),etc). Aber da dies hier ja mit beobachstungswerten gerechnet werden soll,
    gibt es da nichts (was ich finden konnte). Es soll übrigens nicht nur das
    globale Minimum und Maximum herausgefiltert werden, sondern auch sozusagen
    lokale Extrema (wobei wiederum nicht jeder Wert, der zu dem danebenliegenden
    Wert nur um rund ??% abweicht als lokal extrem bezeichnet werden soll. die
    extrma sollten sich nach möglichkeit nach der regressionsgraden oder dem
    allgemeinen durchschnitt richten). Hat vll. jemand irgendwelche Ideen, dies zu
    berechnen (ohne auszuprobieren)?



  • Ein bißchen detaillierter darf's schon sein. 🙂 Was heißt denn Datenbank mit Werten?

    Heißt das Du hast es gibt ne Funktion f(x) (die du nicht kennst) und du hast 3000 stellen wo die ausgewertet wurde? Etwa f(1),f(2),....,f(3000) oder irgendwas anderes?



  • Wenns so ist, wie Jester es sagt, dann gilt:

    lokales Maximum:

    f(x-1)<f(x)>f(x+1)

    lokales Minimum:
    f(x-1)>f(x)<f(x+1)

    globales maximum:

    max{f(0),f(1),f(2),...,f(n)}

    globales minimum:
    min{f(0),f(1),f(2),...,f(n)}

    //edit arrgh post nicht komplett durchgelesen gehabt.
    Dann musst du die Punkte vorher noch transformieren, damit das hier gilt(wobei die regressionsgrade hier nicht unbedingt taugt, denn eine gerade hat keine lokalen maxima. du brauchst wohl irgendeine Funktion, die der Struktur der Werte in irgendeiner Art nahekommen muss). Wobei die Frage ist, ob du die lokalen/globalen maxima der Punkte in der Datenbank haben willst, oder die der Funktion die durch die Punkte näherungsweise beschrieben wird?



  • Wenn du die Funktion als endliche Folge von Funktionswerten gegeben hast, dann bilde einfach die Different der Funktionswerte f(n)f(n1)f(n)-f(n-1).
    Deine Extremwertstellen sind dann überall dort, wo die Folge dieser Differenzen das Vorzeichen wechselt. Von + auf - ist ein Maximum und umgekehrt ein Minimum.



  • Also zuerst: Ich habe das jetzt so verstanden, dass du in dieser Tabelle die x und die dazugehörigen y-Werte hast.
    Dann ist es so, dass es dann ein Extrempunkt ist, wenn in der direkten Umgebung kein Punkt höher bzw. tiefer liegt. Das heißt, dass vor einem Maximum die Werte immer weiter ansteigen und danach wieder abfallen. Du musst also eigentlich nur schauen, bis zu welchem Punkt die Werte ansteigen. Sobald sie wieder fallen, weißt du, dass dort ein Maximum sein muss. Für Minima ist es analog.

    PS: Mir fällt gerade auf, dass es das gleiche wie otzes ist, nur in Wortform^^



  • und auch das gleiche was Jover geschrieben hat. Wir haben also schon dreimal die gleiche Lösung.

    Ich warte gespannt was das Problem ist. 🙂



  • Eine Funktion ist nicht gegeben. Und es wäre auch viel zu ungenau, eine zu erstellen.
    Richtig ist, dass ich x und y Werte gegeben habe. Da die y Werte unabhängig von den anderen ist, funktioniert das so wie es im vorherigen post ist nicht, abgesehen davon, dass es sich wieder auf ein Funktion bezieht.
    Ein bsp:

    x | y
    -----
    1 | 4
    2 | 7
    3 | 6
    4 | 5
    5 | 10
    6 | 1
    7 | 2
    8 | 9
    

    Nun ist es bei den acht Daten recht einfach, das ganze in Klassen einzuteilen:

    Klasse 1: x-Wert 6; 7
    Klasse 2: x-Wert 1;2;3;4
    Klasse 3: x-Wert 5; 8
    

    Und um sowas jetzt exakt zu machen z.B. irgenwie:
    ich habe 8 Zahlen. Alle die nur +/-50% von y-quer abweichen kommen in die Klasse 2. Alle die mehr als -50% von y-quer abweichen kommen in Klasse 1 und alle mit mehr als +50% Abweichung von y-quer sind dann Klasse 3.
    Und für sowas, wo die 50% Prozent jetzt von den Daten abhängig sind (also es dann z.B. 40% oder mehr oder weniger - auf die Daten bezogen) und der Anzahl der Klassen (d.h. wenn ich jetzt mal als bsp. bei den 50% bleibe aber jetzt 5 Klassen will, dann wäre es jetzt zwar recht einfach zu sagen: wir fügen einfach eine weitere 50% Klasse hinzu und es gilt dann:
    (% als Abweichung vom Mittelwert)

    Klasse 1: y > -100%
    Klasse 2: y > -50%
    Klasse 3: y > 0%  && y < 50%
    Klasse 4: y > 50%
    Klasse 5: y > 100%
    

    Ein Beispielwert wird nun einer Klasse zugeordnet (von der Tabelle, s.o.):
    x=3 -> y=6
    der Mittelwert von alle y ist: 5,5
    Demnach gilt:

    Klasse 1: y < 0
    Klasse 2: 0 <= y < 2,75
    Klasse 3: 2,75 <= y < 8,25
    Klasse 4: 8,25 <= y < 11
    Klasse 5: y > 11
    

    Da y=6 ist wird es der Klasse 3 zugeordnet.

    Jetzt soll aber die Abweichung in % nicht wilkürlich festgelegt werden, sondern per Formel definiert werden - unzwar für jede Klasse (unzwar abhängig von den Daten und der Anzahl der Klassen).



  • Und was für ne definition hättest du gern? welche Formel? von welchem Parameter soll die Formel abhängen?

    Und was hat das mit extremwerten zu tun?



  • Stier X schrieb:

    Eine Funktion ist nicht gegeben. Und es wäre auch viel zu ungenau, eine zu erstellen.
    Richtig ist, dass ich x und y Werte gegeben habe. Da die y Werte unabhängig von den anderen ist, funktioniert das so wie es im vorherigen post ist nicht, abgesehen davon, dass es sich wieder auf ein Funktion bezieht.

    Aber du hast doch eine Funktion. Die Funktion, die dem ersten Eintrag deiner tabelle den zweiten zuordnet. Insofern funktionieren die angegebenen Verfahren sehr wohl.

    Nun ist es bei den acht Daten recht einfach, das ganze in Klassen einzuteilen:
    Klasse 1: x-Wert 6; 7
    Klasse 2: x-Wert 1;2;3;4
    Klasse 3: x-Wert 5; 8

    Du willst also die Funktionswerte klassifizieren und garnicht nur Minima und Maxima bestimmen? Das ist natürlich was anderes.

    Jetzt soll aber die Abweichung in % nicht wilkürlich festgelegt werden, sondern per Formel definiert werden - unzwar für jede Klasse (unzwar abhängig von den Daten und der Anzahl der Klassen).

    Und zwar so, dass es gerade richtig ist? Tja, da mußte schon ein bißchen mehr Vorgaben machen. Man könnte ja zum beispiel auch jeden Wert in seine eigene Klasse packen. Du mußt also mindestens zum Beispiel vorgeben wieviele Klassen es geben soll und vielleicht auch noch was über die Verteilung sagen. Sind alle Klassen gleichwahrscheinlich? Oder manche viel wahrscheinlicher als andere. Wenn Du das machst lässt sich zum Beispiel mit Hilfe von Bayes-Schätzern ein geeigneter Klassifikator bestimmen.



  • nein, es gibt keine exakte funktion.
    denn das sind alles monatlich gemessene Beobachtungswerte (die man in eine annährende Funktion packen könnte, aber wie schon gesagt, ist das zu ungenau).
    Im Prinziep will ich durch die klassifikation von den y-Werten, die Klassen erstellen und dann ausgeben. In den Klassen 1 und 5 sind dann die größten Abweichungen zu y-quer und demnach in 2 und 4 nur noch geringere Abweichungen und 3 ist die "Hauptklasse". Die Klassen sollen folgendermaßen eingeteilt sein:
    Situation 1:
    Es soll insgesammt 5 Klassen geben mit den eigenschaften:
    Klasse 1 und 5 sind gleich Wahrscheinlich/Groß und überschreiten nicht 100%
    Klasse 2 und 4 sind gleich Wahrscheinlich/Groß aber wahrscheinlicher/größer als Klasse 1 und 5
    Klasse 3 ist die größte Klasse und verteilt sich gleich mäßig um den Mittelwert

    Situation 2
    Es gibt 3 Klassen:
    Klasse 1 ist sowohl kleiner als Klasse 3 als auch als Klasse 2 und liegt über Klasse 2 und geht bis max. 100% Abweichung vom Mittelwert
    Klasse 2 ist größer als Klasse 1 und verteilt sich zu 70% über und 30% unter dem Mittelwert bezogen auf die Gesammtgröße von Klasse 2
    Klasse 3 ist die größte Klasse, als das sie vom unteren Bereich von Klasse 2 bis ins negativ-unendliche geht (da es hier nie größere Abweichungen als 100% gibt sagen wir mal 200%).

    Werde mir jetzt mal das von Bayes anschauen (noch nie was von gehört).



  • Stier X schrieb:

    nein, es gibt keine exakte funktion.
    denn das sind alles monatlich gemessene Beobachtungswerte

    Das ist natürlich eine Funktion.



  • Stier X schrieb:

    Werde mir jetzt mal das von Bayes anschauen (noch nie was von gehört).

    Ich fürchte das wird dir auch nicht gefallen. Als ersten Schritt würde ich Dir mal empfehlen loszulassen und Dich mit dem Gedanken anzufreunden, dass es dabei um eine Funktion geht. Dass du diese nicht kennst, sondern nur ihre Auswertung an bestimmten Punkten tut dem keinen Abbruch. Ohne diese Einsicht wird Dir kaum jemand helfen können. Du kannste es natürlich auch als stochastischen Prozess formulieren, wenn Dir das netter erscheint. Aber auf die ein oder andere Weise wirst Du das Problem soweit formalisieren müssen dass Du mit Standardmethoden ran kannst.



  • Ok, sagen wir eine Funktion, die sehr viel "Faktoren" berücksichtigen muss...
    Hier mal ein Bsp. für Variante 1 mit Originaldaten aus der Datenbank:
    [php]http://www.hostpix.de/080901/k-WiaGH0zC.jpg[/php]
    (Natürlich wäre noch schön, wenn die Klassen parallel zur regrssionsgerade verlaufen...)
    Die klassen sind natürlich wilkürlich eingeteilt, so wie es in paint gerade am besten kam....



  • Stier X schrieb:

    Ok, sagen wir eine Funktion, die sehr viel "Faktoren" berücksichtigen muss...

    Mach's erstmal garnicht so kompliziert. Du beobachtest eine Funktion über die Zeit. Das heißt Du hast eine Funktion, die jedem Zeitpunkt einen Wert zuordnet. Theoretisch kann die Funktion ja beliebig weiter gehen. Eine allgemin funktionierende Einteilung kann es also nicht geben. Du mußt also nun selber ein bißchen festlegen wie eine gute Einteilung aussieht und wie nicht, oder eben Aussagen über die Funktion treffen. Die scheint ja nicht völlig beliebig zu sein, sondern hat bestimmte Charakteristika. Erst wenn Du mehr Informationen reinsteckst in ein Verfahren kann es "Lernen" was eine gute Klassifikation ist und was nicht.

    Du könntest zum Beispiel festlegen, dass Du 5 Klassen haben möchtest, eine die ca. 40 % der Gesamtdaten enthält und die möglichst stark um den Mittelpunkt konzentriert sind. Zwei weitere, die jeweils 20% der Gesamtdaten enthalten, eine diejenigen die etwas nach oben sind und diejenigen, die etwas nach unten abweichen. und nochmal 20 Klassen, jede soll 10% der Daten enthalten und zwar die starken ausreißer nach oben/unten.



  • Es ist zwar schon inhaltlich erklärt, aber das Kind nicht benannt worden. Das was Du suchst läßt sich mit Hilfe der "numerischen Differentierung" lösen. Du hast eine diskrete Definitionsmenge zu einer kontinuierlichen Wertemenge und daraus läßt sich mit Hilfe einer sogenannten Vorwärtz-Differenz die erste (diskrete) Ableitung bilden. Außerdem läßt sich mit Hilfe Deiner Werte auch die zweite (diskrete) Ableitung finden, die sogenannte 3-Punkte-Gleichung. Die Identifizierung der Extreme ist dann absolut analog zur bekannten Analysis.



  • Stier X schrieb:

    Ok, sagen wir eine Funktion, die sehr viel "Faktoren" berücksichtigen muss...

    Vielleicht mal zur Verdeutlichung: jede Abbildung R->R ist eine Funktion. Dh sobald du x/y paare aufstellst, wobei jedes x genau einmal vorkommt, hast du eine Funktion.

    dann zum einfachsten: Die Klassen kannst du parallel zur regressionsgrade verlaufen lassen, indem du den Funktionswert der gerade an der Stelle einfach von den Punkten abziehst.

    Bei Situation 1 kannst du erstmal eine beliebige Logistische Funktion verwenden.

    Erster Ansatz wäre zb sowas:
    x=klassennr
    n=anzahl der Klassen
    f(x)=ymin+ymax×11+e12xn+5f(x)=y_{min}+y_{max}\times \frac{1}{1+e^{\frac{-12x}{n}+5}}
    wobei ymin und ymax die globalen extrema sind. Die funktion gibt dann immer die obere Grenze zurück.

    @Winn er will keine Extrema



  • Stimmt, vergessen, jedem x wird genau ein y wert zugeordnet 🙄 .

    Ich glaube ich mach da jetzt so einen kleinen mix draus:
    Die Klassen einteilung so ähnlich wie jester sagte (vom prinziep her). daraus kann ich dann ja eine zur x achse parallel verlaufende gerade machen und noch etwas umformen mit der steigung der regressionsgeraden, dann sollte das so einigermaßen hinkommen. (dachte zwar, dass es exakter geht, aber das ist dann für den zweck vll. auch schon übertrieben 😃 )

    Vielen Dank für die Hilfe!



  • Das parallel zur Regressionsgerade machen würde ich wie otze es vorgeschlagen hat lösen. Bestimme zuerst die Regressionsgerade und zieh die dann von deiner funktion ab. dadurch kriegste eine funktion mit mittelwert 0. deren punkte klassifizierst du dann schön mit waagerecht laufenden streifen. das entspricht dann genau einer klassifikation der punkte der originalfunktion auf schrägen streifen.


Anmelden zum Antworten