|
| Kategóriák: | Egyéb » Matematika Programozási nyelvek » Java |
| taz1988 kérdése | privát | 2009.10.28. 12:42 | válasz |
| Sziasztok! Levenberg-Marquardt algoritmust kell használnom egy alkalmazáshoz. Eddig még sohasem használtam, csak annyit tudok róla hogy megkeresi fügvények minimum helyét ( ha jól értem ). Kérem, hogy akinek van már matematikai tapasztalata, hogy ez az algoritmus hogy mükődik, írja le nekem. A másik probléma hogy egy Java implementáció kell, olyan aminél nem kéne definiálni a fügvény parciális deriváltját is. Találkozot valaki már ilyen implementációval? Az se baj ha nem java nyelv, ha könnyen átvihető java nyelvre! Előre is köszönöm a válaszokat! | |
| chikk megoldása (50 pont) | előzmény | privát | 2009.10.28. 19:09 | válasz |
| Tehát: én nem hinném, hogy találsz olyan libet ingyér Java-hoz, ami kiszámolja a deriváltat. Helyette én ezt javaslom: Online Derivate Calculator. És akkor úgy építed fel a rndszer, hogy IFunction, annak lesz egy Calculate meg egy CalculateDerivate metódusa. L-M-et C#-hoz itt találtam: L-M C#, Java-st meg már linkeltek az előbb. Ez azonban meg fog halni ha non-singular a mátrixod. Szóval ebben le kell cserélni a dekompozíciót erre: SVD decomposition. És így már jó lesz. Sok sikert! | |
| klorand hozzászólása taz1988 (12:42) részére | előzmény | privát | 2009.10.28. 13:00 | válasz |
| Eddig még sohasem használtam, csak annyit tudok róla hogy megkeresi fügvények minimum helyét ( ha jól értem ). >>Google-t sem hasznaltad eddig, de tudtad, hogy megkeresi a problemad megoldasat..? | |
| taz1988 hozzászólása klorand (13:00) részére | előzmény | privát | 2009.10.28. 13:41 | válasz |
| Google-t ismerem már és megtaláltam róla az angol leírásokat mind a wikipédián mind más helyeken, azonban ezek mindegyike angol, és az angolommal bajok vannak! ( legalábbis a matek szövegek még nem annyira mennek...) Max csak akkor rakok fel egy kérdést ha már nagyon sok időt eltöltöttem a kereséssel és nem találtam meg a megoldást... És mint kihangsulyoztam olyan implementációt keresek ( ha van ilyen ) aminél nem kell a parciális deriváltat kiszámolni! És én csak ilyen implementációval találkoztam ezért kérdezem tapasztaltabbakat meg lehet-e oldani nélküle, illetve van-e olyan implementáció valahol ahol ezt megoldották! | |
| M. Norbert hozzászólása taz1988 (13:41) részére | előzmény | privát | 2009.10.28. 13:58 | válasz |
| lusta voltam atolvasni a lenyeget, de nezd meg te hatha jo lesz neked : link | |
| taz1988 hozzászólása M. Norbert (13:58) részére | előzmény | privát | 2009.10.28. 16:47 | válasz |
| Ezt már megtaláltam én is =) úgy tűnik ebből parciális deriválás lesz :( | |
| chikk hozzászólása M. Norbert (13:58) részére | előzmény | privát | 2009.10.28. 17:39 | válasz |
| Nem ilyen egyszerű, mert az LU dekompozíció, amit itt az invertáláshoz használnak, nem megy non-singular mátrixokon (vagyis ha a determináns nem 0). L-M-hez SVD dekompozíció kell, amihez én megoldást csak fizetős libekben találtam eddig. Ha találtok free-t, akkor én is megköszönném! | |
| chikk hozzászólása taz1988 (16:47) részére | előzmény | privát | 2009.10.28. 17:43 | válasz |
| Ezt már megtaláltam én is =) úgy tűnik ebből parciális deriválás lesz Mivel az egész L-M a Quasi Newtonra és a Gradient Descentre épül, nem tudod kihagyni a deriváltakat, mert kellenek a Hessian közelítéshez. Még az a szerencse, hogy a 2nd order deriváltak nem kellenek, mert az L-M JTJ-vel közelíti, nem úgy mint a Newton. | |
| chikk hozzászólása taz1988 (12:42) részére | előzmény | privát | 2009.10.28. 17:48 | válasz |
| Amúgy mire kell ez? A végelszámolásnál az L-M csúnyán elvérzik például egy SCG-hez képest, mert amennyivel többet kell számolni, és amennyivel több adatot kell a memóriában tartani, annyival nem gyorsabb a konvergáció. Lehet, hogy SCG-nél több iteráció kell, de ezeket olyan gyorsan és olyan kis memóriafogyasztás mellett tudod kiszámolni, hogy bőven-bőven ráver az L-M-re. Amúgy meg egy sima, előjelváltáson alapuló adaptív Gradient Descent még ezekre is ráver takarékosságban és sebességben. | |
| taz1988 hozzászólása chikk (17:43) részére | előzmény | privát | 2009.10.28. 17:50 | válasz |
| Hát nemtom én nem értek hozzá =) Ezért irtam is hogy jó lenne ha valaki elmagyarázná.....mert egy matlabos cuccot kell átírnom javara.... De matlabban fsolve-nél csak átadta a fügvényt, egy kezdő vektort meg az opciókat mást nem és abbol számolta ki neki az eredményt. Mindenesetre ha valaki felvílágosítana a témában hogyan müködik a LM meg a Newtonos módszer annak örülnék =) | |
| chikk hozzászólása taz1988 (17:50) részére | előzmény | privát | 2009.10.28. 18:08 | válasz |
| Ja, MATLAB, az mindent megmagyaráz. Abban a f.sban a legegyszerűbb gradient descentet is évekig tart kiszámolni, azért nem tűnik fel senkinek, hogy mennyire ótvar az L-M. Most gondolj bele! Iterációnként a teljes Jacobi, annak a transzponáltja, ezeknek szorzata, _majd ennek inverze - SMD-vel_, majd ezt beszorzod az identity * mű-vel, majd ezt a hiba vektorral ... és mindeközben a memóriában alapműveletenként új mátrix jön létre, ami egy 50+ változós fügvénynél már egész kellemes. :) Sokat tud a MATLAB, az igaz, mert képes kiszámolni a deriváltakat is a függvényből, így azt nem kell átadni, de iszonyatosan büdös tetű beteg agyhalott lassú, nekem elhiheted. Szóval a Java átültetéshez vagy úgy oldod meg, hogy a függvény mellett átadod a deriváltját is, vagy írsz egy függvény parsert, ami ki tudja számolni a deriváltat magától (mateknak matek, de ott van a függvénytáblában minden hozzá). Biztos van olyan Java lib, ami ezt tudja, de 10000%, hogy nem ingyenbe'. De akkor még mindig kell egy olyan lib, ami képes SVD-re, ami szintúgy nem hinném, hogy Java-hoz van ingyenbe'. Azért utána lehet nézni. Mi a feladat pontosan? | |
| taz1988 hozzászólása chikk (18:08) részére | előzmény | privát | 2009.10.28. 18:31 | válasz |
| Hát ennél az esetnél konkrétan van egy egyenletrendszer a matlab programban és LM-mel megkeresem ennek a megoldását illetve keresem azt a helyet ahhol az egyenletrendszer megoldása nulla lesz...ha jól értetem =) (az egyenletrendszerekkel egy transzformáció paramétereit keresük stb...azért csinálták meg igy ) És ezt számolja ki matlabban! Csak itt ugye az egyenletrendszert megcsinálták egy fügvényben, átadták a kezdő vektort meg az opciókat. És a megbízom mondta hogy olyan LM java implementációt keressek lehetőleg, amivel ki lehet számolni így, anélkül hogy parciális deriváltat kéne ki számolnunk. Tudsz esetleg jó c vagy c++ vagy c# implementációt ami képes így számólni? ( ha nagyon elszánt leszek le implementálóm javara =D ) Ez kb a feladat. De még nem teljesen vagyok tisztába az lm mükdésével se mert bár angolal felmásutt állok a wikipédia matek szövegét sehogy se vette be az agyam és fullra nem értem hogy mi a koncepciója és hogy műkődik egyálltalán! Esetleg mellékesen, ha tudod hogy műkődik az LM letudnád írni nekem? | |
| chikk hozzászólása taz1988 (18:31) részére | előzmény | privát | 2009.10.28. 18:51 | válasz |
| Hosszú lenne elmagyarázni, és a Wiki-n érthetően le van írva. Sajnos ebben a szakmában nem lehet úgy megélni, hogy nem tudsz angolul. Ha meg matematikai területen fejlesztesz, akkor a minimum, hogy ismerni kell az összes iteratív optimalizációt legalább elméleti szinten. Sajna nem ismerek olyan implementációt a MATLAB-on kívül, ami magától ki tudja számolni a parciális deriváltakat. :( Én már minden említésre méltó optimalizációt implementáltam C#-ban, csak neuronhálózatokhoz, ahol a parciális derivált nem okoz problémát, lévén a neuronok csak nagyon egyszerű függvények, amiknek nem kunszt megadni a deriváltjai kódban. Saját tapasztalat, hogy az L-M csak elméletben hangzik olyan jól. Igen szép és komoly matematika van mögötte, azonban a gyakorlatban, ahol egy számítás sikerességét processzoridőben és memóriafelhasználásban mérjük, az L-M igen harmatosan teljesít. Mi a konkrét program? Honnan jön az egyenlet? | |
| taz1988 hozzászólása chikk (18:51) részére | előzmény | privát | 2009.10.28. 19:10 | válasz |
| Köszi a segítséget mostmár legalább képbe vagyok a dolgokkal, és azzal, hogy muszály lesz parciális deriváltat számolni! Hát igazából ez egy képfeldolgozási algoritmus átírása matlabbol javaba nem matematikai. Bár a képfeldolgozáshoz komoly matek társul =) Most végzek programtervező informatika Bsc-n csak úgy kiváncsiságból: te mivel foglalkozol így matematika területén belül, és mennyire tudsz megélni belőle? Köszönöm a segítségedet mégegyszer! | |
| chikk hozzászólása taz1988 (19:10) részére | előzmény | privát | 2009.10.28. 19:28 | válasz |
| Van egy (egyelőre még) garázsprojektem: NeoComp Framework. .NET 4-hez készül. Globális optimalizációkról, neuron és logikai hálózatokról szól az egész, 100% matek, még ki sem léptem a konzolos stádiumból vele, pedig már 2 éve dolgozom rajta. Ilyeneket kezdett el tudni. | |
| LyNX hozzászólása chikk (19:28) részére | előzmény | privát | 2012.07.13. 12:07 | válasz |
| Sziasztok! Szeretnék kérni egy kis segítséget (főleg tőled chikk). Hasonló dologgal kezdtem el foglalkozni, mint amiről ti is beszélgettek, sokat segített az értekezésetek, azonban nagyon sok, számomra ismeretlen rövidítést használtok. (LU, SMD, JTJ, SCG) Kérlek írjátok le legalább a teljes kifejezést rá, mert így google se nagyon dob semmit ezekre. Előre is köszi. LyNX | |
| taz1988 hozzászólása LyNX (12:07) részére | előzmény | privát | 2012.07.15. 12:18 | válasz |
| Szia! Ezek a rövidítések főként a közelítő és szimbolikus számítások (vagy numerikus matematika, így is hívják azt hiszem) témaköreiből származnak. Ezeket az algoritmusokat részben ott, részben más területeken használják. (Ennek a területnek nem én vagyok a legnagyobb szakértője =) ). Az LU egy mátrix felbontásra utal: http://hu.wikipedia.org/wiki/LU_felbont%C3%A1s Az SMD-vel kapcsolatban ezt találtam: http://justindomke.wordpress.com/stochastic-meta-descent/ Elvileg a jelentése Stochastic Meta-Descent erre keresve talán több információt találhaszt róla. JTJ-vel kapcsolatban is találsz a neten infokat ha JTJ Numerical, JTJ Matrix és egyéb módokon keresel rá. (lehet régen tudtam mi ez, de mióta nem használtam ezt a tudást, kicsit megkopot). Mindenesetre ezek mind főként a Közelítő és szimbólikus számítások (numerikus matematika) témaköreihez kapcsolodnak. Ezzel kapcsolataban keresve a dolgokra találhatsz angol és magyar nyelvű anyagokat. Mihez kell amúgy ez a tudás? Amúgy ha LM kell java-ra, végül sikerült találnóm anno egy ingyenes implementációt, amit tudtam használni és igen hatékony volt (egy külföldi egyetem leimplementált egy fortran numerikus csomagot java-ra). Ha esetleg kell, akkor írj és előtúrom a linket =) ui.: Bocs a helyesírásért (mindig is gyenge voltam belőle =) ) | |
| LyNX hozzászólása taz1988 (12:18) részére | előzmény | privát | 2012.07.16. 16:06 | válasz |
| Köszönöm szépen a választ. Így már lényegesen egyszerűbb lesz :) A kódra visszatérve, köszi, a link jól jönne. (Leginkább C-ben fejlesztek, és amit chikk mondott az L-M ről, nos nem valami bizalomgerjesztő, de vetnék rá egy pillantást.) Viszont mondott számos más megoldást, de úgy, hogy nem tudom a rövidítéseket, bajos lett volna egyet is implementálni. :D Egy hatékony, és nem túl energiaigényes kódot akarok írni, a beszélgetés alapján van rá némi sansz, hogy létezik ilyen. Igazából van egy forrásfájlom egy mérésből, és azt szeretném feldolgozni, de kell egy illesztő rutin, mert zavaros a jel. Üdv: LyNX | |

