WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Maximum Likelihood mittels fmincon

 

blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2013, 15:59     Titel: Maximum Likelihood mittels fmincon
  Antworten mit Zitat      
Hallo Leute,
optimiere gerade meine dichte unter nebenbedingungen und stelle beim optimierungsprozess immer wieder fest, dass der wert der likelihoodfunktion nicht kontinuierlich mit jeder iteration sinkt, sondern phasenweise wieder hoch geht und manchmal am ende sogar konvergiert ohne dass er den wert einer anderen iteration unterbietet.
ich kann mir das nur so erklären, dass der optimierer sich manchmal in gefilden aufhält, die ich ihm untersagt habe und er dann wieder zurückgeht?

vg


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2013, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

dem ist vermutlich so. Lass dir doch den iterativen Output anzeigen und poste den hier. Daraus sollte man das ablesen können.
Code:

opts = optimset('Display', 'iter');
fmincon(..., opts)



Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2013, 16:40     Titel:
  Antworten mit Zitat      
Code:
Iter F-count            f(x)  Feasibility   optimality         step
    0       8    1.992006e+03    0.000e+00    4.582e+00
    1      33    1.992006e+03    0.000e+00    8.110e-01    1.977e-04
    2      42    1.992005e+03    0.000e+00    7.803e-01    1.585e-04
    3      54    1.992015e+03    0.000e+00    9.444e+00    5.895e-04
    4      63    1.992015e+03    0.000e+00    9.035e+00    1.638e-03
    5      75    1.993646e+03    0.000e+00    1.320e+02    8.166e-03
    6      84    1.993617e+03    0.000e+00    1.245e+02    2.200e-02
    7      99    1.999840e+03    0.000e+00    2.932e+02    1.119e-02
    8     108    1.999791e+03    0.000e+00    2.894e+02    1.690e-02
    9     116    2.011018e+03    0.000e+00    9.832e+02    4.294e+00
   10     126    2.007973e+03    0.000e+00    6.173e+02    5.142e+00
   11     134    1.999217e+03    0.000e+00    2.151e+02    5.296e+00
   12     143    1.993868e+03    0.000e+00    7.054e+01    1.504e+00
   13     151    1.993058e+03    0.000e+00    1.211e+02    5.604e-01
   14     160    1.992157e+03    0.000e+00    6.995e+01    2.567e+00
   15     169    1.992180e+03    0.000e+00    7.740e+01    1.065e+00
   16     179    1.992108e+03    0.000e+00    6.944e+01    1.833e-01
   17     188    1.992092e+03    0.000e+00    1.846e+01    3.010e-01
   18     196    1.992014e+03    0.000e+00    6.131e+00    6.368e-01
   19     204    1.992017e+03    0.000e+00    4.577e+00    1.164e-01
   20     212    1.992020e+03    0.000e+00    2.466e+00    4.978e-01
   21     220    1.992030e+03    0.000e+00    2.509e+00    2.229e+00
   22     228    1.992044e+03    0.000e+00    8.296e+00    4.622e+00
   23     236    1.992056e+03    0.000e+00    1.089e+01    6.031e+00
   24     244    1.992054e+03    0.000e+00    6.049e+00    3.766e+00
   25     252    1.992052e+03    0.000e+00    9.786e-01    4.539e-01
   26     260    1.992052e+03    0.000e+00    1.247e-01    6.338e-02
   27     268    1.992029e+03    0.000e+00    1.198e+00    7.734e+00
   28     276    1.992021e+03    0.000e+00    1.763e-01    4.254e+00
   29     284    1.992019e+03    0.000e+00    3.139e-02    1.203e+00
   30     292    1.992019e+03    0.000e+00    2.000e-02    1.070e-01

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
   31     300    1.992012e+03    0.000e+00    1.894e-01    4.774e+00
   32     308    1.992008e+03    0.000e+00    1.472e-01    2.654e+00
   33     316    1.992008e+03    0.000e+00    1.594e-02    2.587e-01
   34     324    1.992008e+03    0.000e+00    1.645e-02    9.231e-02
   35     332    1.992008e+03    0.000e+00    5.473e-03    5.181e-03

Local minimum possible. Constraints satisfied.


ich schätze das modell jeden tag neu und nehme die konvergierten parameter von gestern als startwerte für die schätzung heute. wie man sieht war der erste wert schon besser als der letzte.

beste grüße
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2013, 16:46     Titel:
  Antworten mit Zitat      
das ist auf den ersten blick auch das erste mal wo das vorlag. ist ja schon irritierend, zumal ich weiss, dass die startwerte ja den restriktionen genügen und somit keine violation vorliegt.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2013, 17:34     Titel:
  Antworten mit Zitat      
Hallo,

das erstaunt mich. Die Zielfunktion ist aber schon deterministisch, oder enthält sie etwa Zufallselemente oder verändert sich innerhalb eines Optimierungsdurchlaufs anderweitig?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2013, 10:50     Titel:
  Antworten mit Zitat      
Moin Harald,
die zielfunktion ist konstant und bedient sich bei jeder iteration an den selben daten.

vg
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2013, 11:16     Titel:
  Antworten mit Zitat      
Hallo,

erstaunt mich wie gesagt. Kannst du ein Beispiel, an dem das auftritt, zur Verfügung stellen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 12:37     Titel:
  Antworten mit Zitat      
moin harald,

ich scheine da ein problem mit meiner dichte zu haben.
nehme ich die dichte von einer anderen person, tritt dieses phänomen nicht auf.
der einzige 'unterschied' ist, dass kollege
mit for-schleife arbeitet
Code:
for i=1:T
    if x(i)<-a/b
        LL(i)   = logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x(i)+a)./(1-lambda)).^2);
    else
        LL(i)   = logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x(i)+a)./(1+lambda)).^2);
    end
end


und ich mit logical indexing:
Code:

find1 = x<(-a./b);
find2 = x>=(-a./b);
LL1(find1)=logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x(find1)+a)./(1-lambda)).^2);
LL1(find2)=logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x(find2)+a)./(1+lambda)).^2);
[\code]

was nach meinem verständnis aber auf das selbe hinauslaufen müsste?
beste grüße
 
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 12:43     Titel:
  Antworten mit Zitat      
als ergänzung vllcht noch:

wir bekommen immer die selben ergebnisse, es sei denn, der parameter nu schnellt da oben. theoretisch muss die dichte für +inf definiert sein, aber bei mir gibt sie schon bei ~340 den geist auf.
und wie gesagt der einzige unterschied liegt in der for-schleife.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2013, 13:47     Titel:
  Antworten mit Zitat      
Hallo,

verändert sich nu zur Laufzeit?

Wenn sichergestellt ist, dass a und b immer Skalare sind und x bzw. LL ein Vektor der Länge T, dann sehe ich da auf den ersten Blick auch keinen Unterschied.
Am einfachsten wird es sein, wenn du beide Implementierungen in den Code aufnimmst und
Code:
testest oder
Code:


Was heißt "bei mir gibt sie schon bei ~340 den geist auf"?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 15:17     Titel:
  Antworten mit Zitat      
was meinst du mit ob sich nu zur laufzeit ändert?

mit "bei mir gibt sie schon bei ~340 den geist auf"? meine ich, dass wenn ich daten so im nu-bereich von 350 habe und ich die restriktionen so locker lasse, dass ich nu größer ~340 zulasse, es auf einmal zu fehlermeldungen kam. habe ich nur nu bis 100 zugelassen, liefen die iteration so durch, wenn auch mit dem eigenartigen phänomen was ich beschrieben habe.

viel mehr kann ich da auch schon nichts mehr zu sagen, habe dieses phänomen iwie wegbekommen. der funktionswert wird mit jeder iteration kleiner und dass der endwert größer als der anfangswert ist, kommt auch nicht mehr vor.

habe die falsche version meiner dichte schon gelöscht, aber zu hause sollte ich noch die alte haben, dann lade ich die vergleiche mal hoch.
ich kann jedenfalls nicht nachvollziehen warum das jetzt läuft und vorher nicht.

beste grüße
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 17:09     Titel:
  Antworten mit Zitat      
bringt das eigtl signifikante performanceschübe wenn ich ein modell 1000 mal schätze und den iterativen output nicht anzeigen lasse?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2013, 18:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
was meinst du mit ob sich nu zur laufzeit ändert?

Ob nu innerhalb einer Optimierung verschiedene Werte annimmt.

Zitat:
dass [...] es auf einmal zu fehlermeldungen kam

Dann ist es wichtig, die Fehlermeldungen zu sehen (hier reinkopieren).

Zitat:
ich kann jedenfalls nicht nachvollziehen warum das jetzt läuft und vorher nicht.

Wenn es jetzt läuft (und das auch so bleibt), dann ist das ja schon mal was :)
Empfehlung: momentanen Stand irgendwo fest abspeichern, nicht dass du irgendwann mal Änderungen machst und dann wieder in die Problemfälle hineinläufst und kein Backup mehr hast.

Ich würde den iterativen Output nur in der Testphase anzeigen. Danach würde ich Output komplett ausschalten und nur noch über EXITFLAG (3. Rückgabeparameter von FMINCON) mit einer IF-Abfrage kontrollieren, ob die Optimierung erfolgreich war. Sonst wird ja nur das Command Window zugespamt, und der Performance tut es natürlich auch nicht gut.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 18:36     Titel:
  Antworten mit Zitat      
okay, den iterativen outbekomme ich weg, aber geht auch das weg?:
Code:
No active inequalities.

Local minimum found.

Optimization completed because the size of the gradient is less than
the selected value of the function tolerance.

<stopping criteria details>
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2013, 20:32     Titel:
  Antworten mit Zitat      
Hallo,

Code:
opts = optimset('Display', 'off');
fmincon(..., opts)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.