Powyższe pytanie mówi wszystko. Zasadniczo moje pytanie dotyczy ogólnej funkcji dopasowania (może być arbitralnie skomplikowane), która będzie nieliniowa w parametrach, które próbuję oszacować, w jaki sposób wybrać wartości początkowe, aby zainicjować dopasowanie? Próbuję robić nieliniowe najmniejsze kwadraty. Czy jest jakaś strategia lub metoda? Czy zostało to zbadane? Jakieś referencje? Czy jest coś poza zgadywaniem ad hoc? Konkretnie, obecnie jedną z form dopasowania, z którymi pracuję, jest forma Gaussa plus forma liniowa z pięcioma parametrami, które próbuję oszacować, takie jak
gdzie (dane odciętych) iy = log 10 (dane rzędnych), co oznacza, że w przestrzeni log-log moje dane wyglądają jak linia prosta plus wybrzuszenie, które aproksymuję gaussowskim. Nie mam teorii, nic, co by mnie poprowadziło o tym, jak zainicjować dopasowanie nieliniowe, z wyjątkiem być może wykresów i gałek ocznych, takich jak nachylenie linii i jaki jest środek / szerokość wypukłości. Ale mam do wyboru ponad sto takich dopasowań zamiast grafowania i zgadywania, wolałbym jakieś podejście, które można zautomatyzować.
Nie mogę znaleźć żadnych odniesień w bibliotece ani w Internecie. Jedyne, co mogę wymyślić, to po prostu losowe wybranie wartości początkowych. MATLAB oferuje losowe wybranie wartości z [0,1] równomiernie rozłożonych. Więc z każdym zestawem danych uruchamiam losowo zainicjowane dopasowanie tysiąc razy, a następnie wybieram ten z najwyższym ? Jakieś inne (lepsze) pomysły?
Dodatek nr 1
Po pierwsze, oto kilka wizualnych reprezentacji zestawów danych, aby pokazać wam, o jakich danych mówię. Publikuję zarówno dane w oryginalnej postaci bez jakiejkolwiek transformacji, a następnie ich wizualną reprezentację w przestrzeni dziennika, ponieważ wyjaśnia niektóre cechy danych, a inne zniekształcają. Zamieszczam próbkę zarówno dobrych, jak i złych danych.
Każdy z sześciu paneli na każdej figurze pokazuje cztery zestawy danych naniesione razem na czerwono, zielono, niebiesko i cyjanowo, a każdy zestaw danych ma dokładnie 20 punktów danych. Staram się dopasować do każdego z nich linię prostą plus gaussa z powodu nierówności widocznych w danych.
Pierwsza cyfra to niektóre z dobrych danych. Druga cyfra to wykres log-log tych samych dobrych danych z rysunku 1. Trzecia liczba to niektóre złe dane. Czwarta cyfra jest logarytmicznym wykresem z figury trzeciej. Jest o wiele więcej danych, to tylko dwa podzbiory. Większość danych (około 3/4) jest dobra, podobnie jak dobre dane, które pokazałem tutaj.
Teraz kilka komentarzy, proszę o wyrozumiałość, ponieważ może to potrwać długo, ale myślę, że wszystkie te szczegóły są konieczne. Spróbuję być możliwie zwięzły.
Pierwotnie spodziewałem się prawa prostej mocy (co oznacza linię prostą w przestrzeni log-log). Kiedy narysowałem wszystko w przestrzeni dziennika, zobaczyłem nieoczekiwany wzrost przy około 4,8 MHz. Guz został dokładnie zbadany i odkryto go również w innych pracach, więc nie zawiedliśmy go. Jest tam fizycznie i wspominają o tym także inne opublikowane prace. Więc właśnie dodałem termin gaussowski do mojej formy liniowej. Zauważ, że to dopasowanie miało być wykonane w przestrzeni log-log (stąd moje dwa pytania łącznie z tym).
Teraz, po przeczytaniu odpowiedzi przez stumpy Joe Pete'a do innej kwestii kopalni (niezwiązane z tych danych w ogóle) i czytając to i to i odniesienia w nim (stuff Clauset), zdaję sobie sprawę, że nie powinien zmieścić się w logarytmiczny przestrzeń. Więc teraz chcę robić wszystko w przestrzeni przekształconej.
Pytanie 1: Patrząc na dobre dane, nadal uważam, że liniowy plus gaussowski w przestrzeni wstępnie przetworzonej jest nadal dobrą formą. Chciałbym usłyszeć od innych, którzy mają większe doświadczenie w zakresie danych, co myślą. Czy gaussowski + liniowy jest rozsądny? Czy powinienem robić tylko gaussa? A może zupełnie inna forma?
Pytania 2: Niezależnie od odpowiedzi na pytanie 1 nadal potrzebowałbym (najprawdopodobniej) nieliniowego dopasowania najmniejszych kwadratów, więc nadal potrzebuję pomocy przy inicjalizacji.
Dane, w których widzimy dwa zestawy, bardzo wolimy uchwycić pierwszy guz przy częstotliwości około 4-5 MHz. Więc nie chcę dodawać więcej terminów gaussowskich, a nasz termin gaussowski powinien być wyśrodkowany na pierwszym guzie, który prawie zawsze jest większy. Chcemy „większej dokładności” między 0,8 MHz a około 5 MHz. Nie zależy nam zbytnio na wyższych częstotliwościach, ale nie chcemy też ich całkowicie ignorować. Więc może jakieś ważenie? Czy B może być zawsze inicjowany w okolicach 4,8 MHz?
Pytania 3: Co według was ekstrapolujesz w ten sposób w tym przypadku? Jakieś zalety / wady? Jakieś inne pomysły na ekstrapolację? Ponownie dbamy tylko o niższe częstotliwości, dlatego ekstrapolujemy między 0 a 1 MHz ... czasami bardzo małe częstotliwości, zbliżone do zera. Wiem, że ten post jest już zapakowany. Zadałem to pytanie tutaj, ponieważ odpowiedzi mogą być powiązane, ale jeśli wolicie, mogę oddzielić to pytanie i zadać kolejne pytanie później.
Na koniec oto dwa przykładowe zestawy danych na żądanie.
0.813010000000000 0.091178000000000 0.012728000000000
1.626000000000000 0.103120000000000 0.019204000000000
2.439000000000000 0.114060000000000 0.063494000000000
3.252000000000000 0.123130000000000 0.071107000000000
4.065000000000000 0.128540000000000 0.073293000000000
4.878000000000000 0.137040000000000 0.074329000000000
5.691100000000000 0.124660000000000 0.071992000000000
6.504099999999999 0.104480000000000 0.071463000000000
7.317100000000000 0.088040000000000 0.070336000000000
8.130099999999999 0.080532000000000 0.036453000000000
8.943100000000001 0.070902000000000 0.024649000000000
9.756100000000000 0.061444000000000 0.024397000000000
10.569000000000001 0.056583000000000 0.025222000000000
11.382000000000000 0.052836000000000 0.024576000000000
12.194999999999999 0.048727000000000 0.026598000000000
13.008000000000001 0.045870000000000 0.029321000000000
13.821000000000000 0.041454000000000 0.067300000000000
14.633999999999999 0.039596000000000 0.081800000000000
15.447000000000001 0.038365000000000 0.076443000000000
16.260000000000002 0.036425000000000 0.075912000000000
Pierwsza kolumna to częstotliwości w MHz, identyczne w każdym zestawie danych. Druga kolumna to dobry zestaw danych (dobre dane pierwszy i drugi, panel 5, czerwony znacznik), a trzecia kolumna to zły zestaw danych (złe dane trzeci i czwarty, panel 5, czerwony marker).
Mam nadzieję, że to wystarczy, aby zachęcić do bardziej oświeconej dyskusji. Dziękuję wszystkim.
źródło
Odpowiedzi:
Gdyby istniała strategia zarówno dobra, jak i ogólna - taka, która zawsze działała - byłaby już wdrożona w każdym nieliniowym programie najmniejszych kwadratów, a wartości początkowe nie byłyby problemem.
W przypadku wielu konkretnych problemów lub rodzin problemów istnieją pewne całkiem dobre podejścia do wartości początkowych; niektóre pakiety są wyposażone w dobre obliczenia wartości początkowej dla określonych modeli nieliniowych lub w bardziej ogólne podejścia, które często działają, ale może być konieczne uzyskanie bardziej szczegółowych funkcji lub bezpośrednie wprowadzenie wartości początkowych.
Eksplorowanie przestrzeni jest konieczne w niektórych sytuacjach, ale myślę, że twoja sytuacja może być taka, że bardziej szczegółowe strategie będą prawdopodobnie warte zachodu - ale zaprojektowanie dobrej wymaga właściwie dużej wiedzy w dziedzinie, której prawdopodobnie nie będziemy w stanie posiadać.
Pomocne byłyby niektóre przykładowe dane - typowe przypadki i trudne, jeśli możesz.
Edycja: Oto przykład, w jaki sposób możesz zrobić całkiem dobrze, jeśli problem nie jest zbyt głośny:
Oto niektóre dane generowane z twojego modelu (wartości populacji to A = 1,9947, B = 10, C = 2,828, D = 0,09, E = 5):
Wartości początkowe, które udało mi się oszacować, to
(As = 1,658, Bs = 10,001, Cs = 3,053, Ds = 0,0881, Es = 5,026)
Dopasowanie tego modelu początkowego wygląda następująco:
Kroki były następujące:
W takim przypadku wartości są bardzo odpowiednie do rozpoczęcia dopasowania nieliniowego.
Napisałem to jako
R
kod, ale to samo można zrobić w MATLAB.Myślę, że możliwe są lepsze rzeczy niż to.
Jeśli dane są bardzo hałaśliwe, nie zadziała to wcale dobrze.
Edycja2: To jest kod, którego użyłem w R, jeśli ktoś jest zainteresowany:
.
źródło
Istnieje ogólne podejście do dopasowania tego rodzaju modeli nieliniowych. Polega ona na ponownym parametryzowaniu parametrów liniowych za pomocą wartości zmiennej zależnej, powiedzmy na pierwszej, ostatniej wartości częstotliwości, i na dobrym punkcie pośrodku, powiedzmy na 6-tym punkcie. następnie możesz utrzymać te parametry na stałym poziomie i rozwiązać dla parametru nieliniowego w pierwszej fazie minimalizacji, a następnie zminimalizować ogólne 5 parametrów.
Schnute i ja wymyśliliśmy to około 1982 r., Montując modele wzrostu dla ryb.
http://www.nrcresearchpress.com/doi/abs/10.1139/f80-172
Jednak nie jest konieczne czytanie tego artykułu. Z uwagi na fakt, że parametry są liniowe, po prostu konieczne jest ustawienie i rozwiązanie liniowego układu równań 3x3, aby zastosować stabilną parametryzację modelu.
W twoim przypadku ze złymi danymi pasuje dość łatwo, a (zwykle) szacunkowe parametry to:
źródło
Jeśli musisz to robić wiele razy, sugerowałbym, abyś używał ewolucyjnego algorytmu w funkcji SSE jako interfejsu, aby podać wartości początkowe.
Z drugiej strony można użyć GEOGEBRA do utworzenia funkcji za pomocą suwaków parametrów i zabawy z nimi w celu uzyskania wartości początkowych.
LUB wartości wyjściowe z danych można oszacować na podstawie obserwacji.
źródło
Dla wartości początkowych można zastosować zwykłe dopasowanie najmniejszych kwadratów. Jego nachylenie i punkt przecięcia byłyby wartościami początkowymi dla D i E. Największa wartość resztkowa byłaby wartością początkową dla A. Pozycja największej wartości resztkowej byłaby wartością początkową dla B. Może ktoś inny może zasugerować wartość początkową dla sigma.
Jednak nieliniowe najmniejsze kwadraty bez wyprowadzania jakiegokolwiek mechanistycznego równania ze znajomości przedmiotu jest ryzykownym biznesem, a robienie wielu osobnych dopasowań czyni sprawy jeszcze bardziej wątpliwymi. Czy za proponowanym równaniem kryje się jakaś wiedza przedmiotowa? Czy istnieją inne niezależne zmienne, które odnoszą się do różnic między 100 osobnymi dopasowaniami? Pomocne może być uwzględnienie tych różnic w jednym równaniu, które będzie pasować do wszystkich danych jednocześnie.
źródło