|
|
Daten Fitten mit Matlab - wie geht's am besten? |
|
Michaela |
Forum-Century
|
|
Beiträge: 239
|
|
|
|
Anmeldedatum: 12.07.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: bis 2007b
|
|
|
|
|
|
Verfasst am: 07.09.2007, 19:53
Titel: Daten Fitten mit Matlab - wie geht's am besten?
|
|
|
|
|
Heute habe ich mal eine etwas allgemeinere Frage an Euch. Ich arbeite grösstenteils mit Matlab, und somit verwende ich Matlab auch zum Fitten von (meist Mess-)daten.
Will man nun kein Polynom fitten, so kommt man mit der "Basic-Fitting" Routine im figure bzw polyfit nicht viel weiter und ist auf fminsearch angewiesen.
Mein Vorgehen ist dann wie folgt: Eine Funktion schreiben die mit fminsearch aufgerufen wird und den Fehler der Fitfunktion ausspuckt.
Als Minimierungskriterium verwende ich das Least-Square Kriterium, also
Zitat: |
error_fit = sum( (istwerte - fit).^2)
|
Dann schaue ich mir den Fit an (wieder ein extra Funktion...bzw. eine nargin Modifikation der Routine für fminsearch....)
und überlege ob die Funktion eigentlich die richtige ist oder ob ich die Fitfunktion modifizieren möchte. Bei mehr als 4 Parametern kann man zB auch viel Zeit für die Suche der passenden Startwerte vergeuden ...
AUch ist es aufwendig einen Parameter mal auf konstant zu setzen, da dafür sowohl der fminsearch Aufruf als auch der Aufruf der Fitfunktion geändert werden müssen.
Alles in allem ist es eine recht zeitraubende Angelegenheit....insbesondere wenn Startwerte unklar sind oder die Fitfunktion noch nciht bekannt ist und erst ausprobiert werden muss.
In Origin ist das Ganze sehr schön gelöst, es gibt ein GUI in dass man die Zahlen eintragen kann und auch gleich online die Güte der STartwerte sieht. Mit Häkchen kann man leicht Parameter sperren und erstmal die anderen fitten um die Startwerte zu optimieren.
Letzes Jahr habe ich mal eine Probeversion der Fitting Toolbox gehabt, war aber recht enttäuscht davon, da nur eindimensionale Fitfunktionen möglich waren und alles in allem die Fittingtoolbox nicht viel besser als das altbekannte mfit4 vom ILL gewirkt hat. (Leider scheint sich mfit4 nicht mit den neuen Matlab-Graphikbefehlen zu vertragen und läuft alles in allem recht instabil...)
Nach langer Rede nun meine Frage: kommen EUch diese Probleme auch bekannt vor? Was habt ihr für Abhilfen gefunden oder tolle Tipps auf LAgeR?
Gibt es eine elegante Möglichkeit, Matlab die Startwerte des Fits bestimmen zu lassen?
Ich dachte, es wäre vielleicht möglich mittels der optimset Optionen fminsearch dazu zu zwingen die Simplexkantenlänge zu vergrössern, aber auch das ist mir nicht gelungen....Oder ist das schon von Anfang an eine falsche Herangehensweise?
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
|
|
Michaela |
Themenstarter
Forum-Century
|
|
Beiträge: 239
|
|
|
|
Anmeldedatum: 12.07.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: bis 2007b
|
|
|
|
|
|
Verfasst am: 14.09.2007, 19:11
Titel:
|
|
...ich hole das Thema nochmal hoch... vielleicht findet sich ja doch jemand der eine Antwort oder seine Erfahrungen schreiben mag?
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 18.09.2007, 13:07
Titel: Parameter konstant lassen, Simplexkantenlänge
|
|
|
|
|
Hallo Michaela,
das sind ja gleich viele Fragen auf einmal. Ich beschäftige mich zwar nicht wirklich mit dem Interpolieren / Approximieren von Daten, kenne mich aber mit den Optimierungsroutinen einigermaßen aus.
1. Zum Festhalten einiger Parameter: Das brauche ich auch ständig und habe mir eine Funktion checkvar dazu geschrieben, die anhand der ganzen Menge der Variablen, der Default-Werte für festgehaltene Parameter, der getroffenen Auswahl und der aktuellen Optimierungswerte den ganzen Parametersatz ermittelt:
Ein lauffähiges Beispiel habe ich angehängt.
2. Die Simplexkantenlänge in fminsearch wird ja proportional zu den Parameterwerten gebildet (ich glaube 5%). Bei einem Wert 0 wird eine kleine Konstante als Kantenlänge verwendet. Warum willst Du die Länge vergrößern? Weil das Verfahren in lokale Minima läuft? Dann würde ich eher von verschiedenen Startpunkten ausgehen oder gleich ein globales Verfahren wählen.
Ich bin auf weitere Diskussionen zum Thema gespannt. Herzliche Grüße
Bijick
Beschreibung: |
lauffähiges Beispiel für checkvar |
|
Download |
Dateiname: |
test.m |
Dateigröße: |
3.02 KB |
Heruntergeladen: |
1416 mal |
|
|
|
Michaela |
Themenstarter
Forum-Century
|
|
Beiträge: 239
|
|
|
|
Anmeldedatum: 12.07.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: bis 2007b
|
|
|
|
|
|
Verfasst am: 22.09.2007, 20:02
Titel:
|
|
|
|
|
Hallo Bjick, danke für deine Antwort - war die Woche über leider offline.
(Übrigens eine gute Idee, mit dem struct - da hat man die Namen gleich dabei und muss nicht die Reihenfolge in einem Vektor abzählen)
Vielen Dank für die checkvar Funktion - dazu aber eine Frage: Verstehe ich es richtig, dass Du stets das gesamte struct , also sowohl die zu variierenden Variablen als auch die festzuhaltenden an fminsearch übergibst?
Falls Du stets die gesamten Variablen übergibst: Wie verhält sich der Simplex Algorithmus wenn es Dimensionen gibt, in denen eine Variation des PAramters (der dann intern wieder auf opt gesetzt wird) keinen Einfluss hat - erkauft man sich die Konvergenz dann nur mit einigen weiteren Iterationen oder wird ein anderes Konvergenzverhalten erreicht? Leider kenne ich den Algorithmus nicht gut genug, um das einschätzen zu können.
Bei der Veränderung der Simplexkantenlänge hast Du richtig geraten: ich wollte verhindern, dass es zu schnell in lokale Minima läuft. Aber vermutlich ist es auch da besser verschiedene STartwerte zu wählen. Aber das ist eine zeitraubende Angelegenheit, wenn man es händisch macht. Daher hätte ich mir in Matlab eine Origin-artige Funktion gewünscht, die einen in einem GUI jeweils die entsprechende Kurve gleich anzeigt, damit man leicht die Werte verändern kann. Gerade bei Kurven mit mehr als drei Parametern ist es doch zeitraubend, die Startwerte optimal zu wählen, wäre schön wenn Matlab dort mehr unterstützen würde. Ich habe aber auc dem file exchange einiges vielversprechendes gefunden - wenn ich zum testen kam werde ich mich wieder melden.
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 24.09.2007, 16:23
Titel:
|
|
|
|
|
Hallo Michaela,
nochmal zu checkvar:
Michaela hat Folgendes geschrieben: |
(...) eine Frage: Verstehe ich es richtig, dass Du stets das gesamte struct , also sowohl die zu variierenden Variablen als auch die festzuhaltenden an fminsearch übergibst?
|
Nein, es werden nur die Optimierungsvariablen übergeben. Da die Zielfunktion aber als "nested function" in der selben Funktion steht wie der Aufruf von fminsearch, kann die Funktion auch auf die nicht-übergebene Struktur zugreifen. Hast du die Datei schon heruntergeladen? Da müsste man es ganz gut sehen: Ich habe gleich eine ganze Umgebung mitgeschrieben, sodass man auch die Bedeutung der Variablen vars, Defaults, index und optvars besser begreifen kann.
Michaela hat Folgendes geschrieben: |
Falls Du stets die gesamten Variablen übergibst: Wie verhält sich der Simplex Algorithmus wenn es Dimensionen gibt, in denen eine Variation des Paramters (der dann intern wieder auf opt gesetzt wird) keinen Einfluss hat - erkauft man sich die Konvergenz dann nur mit einigen weiteren Iterationen oder wird ein anderes Konvergenzverhalten erreicht? Leider kenne ich den Algorithmus nicht gut genug, um das einschätzen zu können.
|
Das habe ich früher gemacht: die Variablen in der Zielfunktion durch konstante Werte überschrieben. Das war allerdings nicht bei fminsearch, sondern fmincon aus der Optimization Toolbox. Bei wenigen stillgelegten Variablen (1 oder 2 von 20) macht das kaum einen Unterschied, aber bei mehreren kann der Algorithmus richtig hängenbleiben, weil immer wieder Suchrichtungen ermittelt werden, in die eine Verbesserung möglich erscheint, aber die Verbesserung nie eintritt. Um diese Probleme zu vermeiden habe ich dann checkvar geschrieben.
Deine Funde aus dem file exchange würden mich auch interessieren. Herzliche Grüße
Bijick
_________________
>> why
|
|
|
Michaela |
Themenstarter
Forum-Century
|
|
Beiträge: 239
|
|
|
|
Anmeldedatum: 12.07.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: bis 2007b
|
|
|
|
|
|
Verfasst am: 24.09.2007, 22:47
Titel:
|
|
sorry - ich habe den download-knopf nicht erkannt
werds morgen mal ausprobieren und melde mich dann.Dankeschön!
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|