Příkaz FIT
1)Nastavitelné parametry
Jsou dva způsoby, jak může příkaz via určit parametry, které mají být nastaveny: buď přímo na příkazové řádce nebo nepřímo odkazováním na soubor s parametry. Tyto dvě metody používají různé prostředky k nastavení původních hodnot.
Nastavitelné parametry lze určit seznamem proměnných odděleným čárkou po klíčovém slově via. Jakákoli proměnná, která není ještě definovaná, je utvořena s počáteční hodnotou 1.0. Ačkoli, aproximace má snahu rychleji konvergovat, pokud byly proměnné předem definovány s více odpovídajícími počátečními hodnotami.
V souboru s parametry se každý parametr může měnit a je zadána odpovídající počáteční hodnota (jedna na řádek) ve tvaru
varname = hodnota
Jsou dovolené poznámky označené '#' a prázdné řádky. Speciální tvar
varname = hodnota #FIXED
znamená, že proměnná je brána jako ´pevný parametr´, který je inicializován parametrovým souborem, ale není nastavovám příkazem fit. Aby bylo jasno, toto může být užitečné k označování proměnných jako pevných parametrů tak, že jejich hodnoty jsou hlášeny příkazem fit. Klíčové slovo #FIXED se musí objevit právě v tomto tvaru
2) Příručka pro začátečníky
Fit se používá k nalezení sady parametrů, která nejlépe aproximuje vaše data k vaší uživatelem definované funkci. Aproximace je posuzována na základě množství čtverců rozdílů nebo 'zbytků' (SSR) mezi vstupními datovými body a funkčními hodnotami ohodnocenými na stejných místech. Toto množství se často nazývá 'chisquare' (podle řeckého písmena chí na druhou, tedy v češtině asi chíčtverec). Algoritmus se snaží minimalizovat SSR nebo precizněji WSSR, tedy zbytky jsou 'váženy' pomocí vstupních chyb dat (nebo 1.0) předtím, než jsou umocněny na druhou. Viz fit error estimates pro více informací.
Proto se to nazývá metoda nejmenších čtverců. Podívejme se na příklad, abychom viděli, co se myslí tím 'nelineární', ale předtím se raději podíváme na některé výrazy. Zde je vhodné používat z jako závislou proměnnou pro uživatelem definované funkce buď jedné nezávisle proměnné z=f(x) nebo dvou nezávisle proměnných z=f(x,y). Parametr je uživatelem definovaná proměnná, kterou nastaví příkaz fit, např. neznámé množství v předpisu funkce. Linearita/nelinearita se vztahuje k závisle proměnné z, k parametrům, které nastavuje fit a ne z a nezávisle proměnné (x a/nebo y). (Přesně technicky vzato, druhá (a vyšší) derivace aproximační funkce vzhledem k parametrům jsou nula pro lineární problém nejmenších čtverců.)
V lineární metodě nejmenších čtverců (LLS) bude uživatelem definovaná funkce součtem jednoduchých funkcí, které nevyžadují žádný parametr a každá bude násobena jedním parametrem. Nelineární metoda nejmenších čtverců (NLLS) používá komplikovanější funkce, ve kterých se mohou používat parametry mnoha způsoby. Příklad ilustrující rozdíl mezi lineární a nelineární metodou nejmenších čtverců je Fourierova řada. Jeden člen řady lze napsat jako
z = a * sin(c*x) + b * cos(c*x).
Pokud a a b jsou neznámé parametry c je konstanta, pak odhad hodnot parametrů je lineární metoda nejmenších čtverců. Pokud ovšem je c neznámý parametr, pak je problém nelineární.
V lineárním případě mohou být hodnoty parametrů určeny poměrně jednoduchou lineární algebrou jedním přímým krokem. Ovšem LLS je zvláštní případ, který lze také řešit spolu s více obecnými NLLS problémy pomocí iterační procedury používanou Gnuplotem. FIT se snaží nalézt minimum provedením hledání. Každý krok iterace spočítá WSSR s novou sadou hodnot parametrů. Marquardt-Levenbergův algoritmus vybírá hodnoty parametrů pro další iteraci. Proces pokračujew, dokud se nedosáhne předvoleného kritéria, buď (1) FIT "konverguje" (relativní změna ve WSSR le menší než FIT_LIMIT) nebo (2) dosáhne předvoleného limitu počtu iterací, FIT_MAXITER (viz řízení aproximace). Fit (aproximace) může být také přerušena příkazem z klávesnice (viz fit).
Často se aproximovaná funkce zakládá na modelu nebo teorii, která se snaží popsat nebo predpovědět chování dat. Pak lze použít fit k nalezení hodnot volných parametrů modelu, k určení jak přesně data odpovídají modelu a k odhadnutí velikosti chyby pro každý parametr. Viz odhady chyb.
Alternativně při aproximaci křivky se funkce vybírají nezávisle na modelu (na základě zkušenosti jak pravděpodobně popisovat trend dat s žádaným rozlišením a minimálním počtem parametrických funkcí). Řešení FITu pak poskytuje analytické zastoupení křivky.
Ovšem pokud všechno, co chcete, je jemná křivka mezi vašemi datovými body, pak volba smooth v příkazu plot může být to, co hledáte a je to lepší než fit.
3) Odhady chyb aproximace
V aproximaci FITem se termín "chyba" používá ve dvou významech, a to odhad chyby v datech a v parametrech.
Odhad chyby v datech se používá k výpočtu relativní váhy káždého bodu při určování váženého součtu čtverců zbytků (WSSR nebo chíčtverec). Tyto mohou ovlivnit odhady parametrů, neboť určují, jak velký vliv má odchylka každého datového bodu od aproximující funkce na konečné hodnoty. Některé z výstupních informací přikazu fit včetně odhadů chyb parametrů mají větší význam, pokud jsou dány přesné chyby datových bodů.
"Statistický přehled" popisuje některé výstupy příkazu fit a poskytuje průpravu k "praktickému průvodci".
Statistický přehled
Teorie nelineární metody nejmenších čtverců (NLLS) je obecně popsána pomocí normálního rozdělení chyb, tzn. že se předpokládá, že vstupní data jsou vzorek množství s daným průměrem a normálním Gaussovým rozdělením kolem průměru s danou směrodatnou odchylkou. V dostatečně velkém vzorku se známou směrodatnou odchylkou lze použít statistiku rozložení chíčtverce k popisu "dobré jakosti aproximace" tím, že se podíváme na proměnnou často nazývanou "chíčtverec." Zde stačí říci, že redukovaný chíčtverec (chíčtverec/počet stupňů volnosti, kde počet stupňů volnosti je počet datových bodů mínus počet parametrů, pomocí kterých se aproximuje) s hodnotou 1.0 indikuje, že vážený součet čtverců odchylek mezi aproximovanou funkcí a datovými body je stejná, jaká byla očekávána z náhodného vzorku dat charakterizovaného funkcí s jistou hodnotou parametrů a danou směrodatnou odchylkou.
Pokud není směrodatná odchylka dat konstantní, jako třeba ve sčítacích statistikách, kde je jistý rozptyl, pak by měl být každý bod vážen samostatně při porovnávání zjištěného a očekávaného součtu odchylek.
Na závěr fit oznámí "stdfit", standartní odchylku aproximace, která je součtem zbytků a rozptylu zbytků, též nazývané "redukovaný chíčtverec", ve kterém jsou vážené datové body. V těchto odhadech se používá počet stupňů volnosti (počet datových bodů mínus počet parametrů aproximace), protože parametry použité ve výpočtu zbytků datových bodů byly získány z těch samých dat.
K odhadu úronvě spolehlivosti parametrů se dá použít minimální chíčtverec získaný z aproximace a statistiku chíčtverců k určení hodnoty chíčtverce odpovídající žádané úrovni spolehlivosti, ale k tomu je třeba značně více výpočtů k zjištění kombinací parametrů, které tyto hodnoty produkují.
Příkaz fit oznamuje odhady chyb parametrů, které jsou snadno získány z variační-kovariační matice po každé konečné iteraci, což je lepší než učování intervalů spolehlivosti. Podle konvence jsou tyto odhady nazývány "standardní chyby" nebo "asymptotické standardní chyby ", protože se počítají stejným způsobem jako standardní chyby (standardní odchylky každého parametru) problému nejmenších čtverců, ačkoli statistické podmínky pro určení množství spočteného jako standardní odchylka neplatí obecně pro problém NLLS. Asymptotické standardní chyby jsou obecně příliš optimistické a neměly by být používány k určení úrovně spolehlivosti, ale jsou použitelné pro kvalitativní účely.
Konečné řešení také vytvoří korelační matici, která indikuje korelaci parametrů v oblasti řešení. Pokud se jeden parametr změní, zvýší se chíčtverec, vyrovná změnu něco jiného? Hlavní diagonální prvky při autokorelaci jsou všechny rovny jedné. Pokud by všechny parametry byly nezávislé, všechny ostatní prvky by se blížily nule. Dvě proměnné, které by kompletně kompenzovaly jedna druhou by měly nediagonální prvek jednotkové velikosti se znakem závislým na tom, zda je vztah přímo nebo nepřímo úměrný. Menší velikost nediagonálního elementu znamená, že odhad standartní odchylky každého parametru je blíže k asymptotické standartní chybě.
Praktické pomůcky
Pokud máte základy pro přiřazování váhy ke každému datovému bodu, pak vás to nutí použít další znalosti o vašem měření, např. počítat s tím, že některé body jsou spolehlivější než ostatní. To může ovlivnit konečné hodnoty parametrů.
Vážení dat poskytuje základ pro interpretaci pomocného výstupu příkazu fit po poslední iteraci. Dokonce pokud vážíte každý bod stejně, pak odhadujte raději průměrnou standartní odchylku než použití váhy 1, což udělá z WSSR bezrozměrnou proměnnou jako chíčtverec je podle definice.
Každá iterace zobrazí informace, které lze použít k ohodnocení průběhu aproximace.( Hvězdička "*" znamená, že nebyla nalezena menší WSSR a program to zkouší znovu.) "Součet čtverců zbytků" též zvaný "chíčtverec" je WSSR mezi daty a vaší aproximované funkci. Fit toto minimalizuje. Na této úrovni, s váženými daty, se očekává, že se chíčtverec bude blížit počtu stupňů volnosti (datové body mínus parametry). WSSR lze použít k výpočtu redukovaného chíčtverce (WSSR/ndf) nebo stdfit- standartní odchylka aproximace, sqrt(WSSR/ndf). Obě tyto hodnoty jsou hlášeny pro konečnou WSSR.
Pokud data nejsou vážena , stdfit je rms hodnota odchylky dat od aproximované funkce v uživatelových jednotkách.
Pokud dodáte platné chyby dat, počet datových bodů je dostatečný a model je správný , pak by měly být redukované chíčtverce přibližně jednotkové. (Pro detaily viz "distribuce chíčtverce" ve vašech oblíbených statistických odkazech.) Pokud je tomu tak, existují další testy mimo rozsah tototo přehledu pro zjištění, jak přesně model aproximuje data.
Redukovaný chíčtverc mnohem větší než 1.0 může být způsoben nesprávnými odhady chyb datových bodů, nesprávnou distribucí chyb dat, systematickou chybou měření nebo nesprávnou funkcí modelu.
Graf zbytků např. "plot datafile using 1:($2-f($1)) může pomoci ukázat jakékoli systematické trendy. Vykreslení jak datových bodů tak funkce může pomoci navrhnout jiný model .
Podobně též redukovaný chíčtverec menší než 1,0 znamená, že WSSR je menší než bylo očekáváno pro náhodný vzorek funkce s normálně distribuovanými chybami. Odhady chyb dat mohou být příliš velké, statistické předpoklady nemusí být oprávněné nebo model funkce může být příliš obecný při kolísání aproximace v částečném vzorku vedle základních trendů. V druhém případě by byla vhodnější jednodušší funkce.
Teké musíte použít zároveň fit a druh problému, který na něj aplikujete, předtím, než můžete popisovat standardní chyby pro praktičtější odhady nejistot parametrů nebo hodnotit význam korelační matice.
Všimněte si, že fit společně s většinou aplikací NLLS minimalizuje vážený součet čtverců vzdáleností (y-f(x))**2. Neposkytuje jakékoli významy výpočtu "chyb" pro hodnoty x, pouze pro y. Též jakékoli "vnější body" (datové body ležící vně normální distribuce modelu) budou mít zveličující efekt na řešení.
4) Řízení aproximace
Existuje mnoho proměnných Gnuplotu, které mohou být definovány tak, aby aproximaci ovlivňovaly. Ty, které mohou být definovány po spuštění Gnuplotu, jsou vypsány v části "řídící proměnné" a ty, které musí být definovány před spuštěním Gnuplotu, jsou vypsány v části "proměnné prostředí".
Řídící proměnné
Původní limit epsilon (1e-5) lze změnit přiřazením hodnoty proměnné FIT_LIMIT. Pokud se součet čtverců zbytků mění mezi dvěma iteračními kroky faktorem menším než toto číslo epsilon, pak se aproximace považuje za "konvergující".
Maximální počet iterací lze omezit přiřazením hodnoty proměnné FIT_MAXITER. Hodnota 0 (nebo vůbec nedefinovaná) znamená, že limit neexistuje. Pokud potřebujete dokonce větší kontrolu nad algoritmem a dobře znáte Marquardt-Levenbergův algoritmus, pak existují další proměnné ovlivňující aproximaci. Startovací hodnota lambda se normálně spočítá automaticky z ML-matice, ale pokud chcete, můžete poskytnout vlastní hodnotu pomocí FIT_START_LAMBDA. Definování FIT_START_LAMBDA jako nula nebo menší znovu aktivuje automatický výpočet této hodnoty.
Proměnná FIT_LAMBDA_FACTOR udává součinitel, kterým je lambda zvýšena nebo snížena, kdykoli je chíčtvercová cílová funkce významně zvýšena nebo snížena. Nastavení FIT_LAMBDA_FACTOR na nula znovu aktivuje původní faktor 10.
Ostatní proměnné s předponou FIT_ mohou být přidány k příkazu fit , takže je bezpečnější nepoužívat tuto předponu pro uživatelem definované proměnné.
Proměnné FIT_SKIP a FIT_INDEX, které byly používány předchozími verzemi Gnuplotu s cestou nazvanou gnufit, již nejsou dostupné. Funkci FIT_SKIP zajišťuje modifikátor datových souborů every. FIT_INDEX byla používána pro vícevětvé aproximace, ale tato aproximace s jednou nezávislou proměnnou se nyní provádí jako pseudo-3D aproximace, ve které jsou druhá nezávislá proměnná a using použity k specifikaci větve. Viz fit multi-branch.
Proměnné prostředí
Proměnné prostředí musí být definovány před spuštěním Gnuplotu. Jak se to dělá, to závisí na vašem operačním systému.
Proměnná FIT_LOG mění jméno (a/nebo cestu) souboru, do kterého bude zapsán záznam aproximace z původního "fit.log" v pracovním adresáři.
Proměnná FIT_SCRIPT určuje příkaz, který může být vykonán po přerušení uživatelem. Původní hodnota je replot, ale mohou být užitečné příkazy plot nebo load k zobrazení grafu upraveného tak, aby vynikl postup aproximace.
5) Vícevětvá aproximace
Ve vícevětvé aproximaci lze aproximovat více datových řad pomocí funkcí jedné nezávisle proměnné se společnými parametry pomocí minimalizace celkové WSSR. Funkce a parametry pro každou datovou řadu jsou určeny pomocí "pseudoproměnné", např. buď čísla datové řady (sloupcový index -1) nebo indexu datového souboru (-2) jako druhé nezávisle proměnné.
Příklad: Jsou dány dvě exponenciální rozklady tvaru z = f(x), každá popisuje různou datovou řadu, ale mají společný čas rozkladu při odhadu hodnot parametrů. Pokud má datový soubor formát x:z:s, pak bude
f(x,y)=(y==0)? a *exp(-x/tau):f *exp(-x/tau)
fit f(x,y) "datový soubor" using 1:-1:2:3 via a,b,tau
Složitější příklad je souboru "hexa.fnc" , který je používaný demo-příkladem "fit.dem". Mohou být vyžadovány vhodné váhy, protože jednotkové váhy způsobují, že jedna větev může mít převahu, pokud existuje rozdíl ve stupni závislé proměnné. Aproximace každé větve samostatně použitím vícevětvého řešení jako počátečních hodnot může napovědět, jaký relativní vliv má každá větev na výsledné hodnoty.
6) Počáteční hodnoty
Nelineární aproximace nezaručuje konvergenci ke globálnímu optimu (řešení metodou nejmenšího součtu kvadrátů zbytků, angl. zkratka SSR) a může se zaseknout na lokálním minimu. Program nezná způsob, jak to zjistit. Záleží pouze na vašem rozhodnutí, kdy k tomu došlo.
Aproximace se může a často se i stane, že se "ztratí", pokud začne daleko od řešení, kde je velké SSR a mění se pomalu kvůli změnám parametrů. Též se může dostat do numericky nestabilní oblasti (např. příliš velké číslo způsobí přetečení pohyblivé čárky), což vyústí do zprávy "nedefinovaná hodnota" nebo v zastavení programu.
Pro zvětšení šance nalezení globálního optima byste měli nastavit počáteční hodnoty minimálně hrubě v blízkosti řešení, např. řádem veličiny, pokud je to možné. Čím blíže jsou vaše počáteční hodnoty k řešení, tím je menší riziko zaseknutí na dalším minimu. Jeden způsob, jak najít počáteční hodnoty je vytisknout data a aproximující funkci do jednoho grafu a změnit hodnoty parametrů a překreslit (replot) dokud není dosažena rozumná podobnost. To je také vhodné zkontrolovat, když se aproximace zastaví na minimu a špatně "padne".
Rozumně dobrá aproximace samozřejmě neznamená, že neexistuje "lepší" (buď ve statistickém smyslu, který je charakterizován zlepšeným kritériem dobré aproximace nebo ve fyzickém smyslu řešením více konzistentním s modelem). V závislosti na problému může být vhodné aproximovat s různými počátečními hodnotami a tím pokrýt rozumný rozsah každého parametru.
7)Tipy
Zde jsou některé tipy, které je vhodné mít na paměti pro nejlepší výsledek. Nejsou příliš organizované , takže je musíte přečíst několikrát, než z nich vyplyne obsah.
Dvě formy argumentu via slouží dvěma zásadně odlišným účelům. Tvar via "soubor" je nejvhodnější pro dávkové operace (možné bez obsluhy), kde pouze dodáte počáteční hodnoty v souboru a můžete později použít update ke zkopírování výsledků zpátky do dalšího (nebo stejného) parametrového souboru.
Tvar via var1, var2,... je nejlepší používat interaktivně, kde lze použít mechanismus historie příkazů k editaci seznamu parametrů aproximace nebo k poskytnutí nových počátečních hodnot pro další pokus. Toto je částečně vhodné pro těžké problémy, kde přímá aproximace se všemi parametry najednou nefunguje bez dobrých počátečních hodnot. K nalezení jak můžete iterovat několikrát s použitím pouze některých parametrů, dokud nejsou hodnoty blízko k místu, kde konečná aproximace se všemi parametry bude fungovat.
Ujistěte se, že neexistuje vzájemná závislost mezi parametry funkce, pomocí které aproximujete. Například, nepokoušejte se aproximovat a*exp(x+b), protože a*exp(x+b) = a*exp(b)*exp(x). Místo toho aproximujte buď a*exp(x) nebo exp(x+b).
Technická poznámka: parametry nesmí být příliš rozdílné velikosti. Čím větší bude poměr největší a nejmenší absolutní hodnoty parametru, tím pomaleji bude aproximace konvergovat. Pokud je poměr blízko nebo větší než převrácená hodnota přesnosti operací s pohyblivou čárkou, může to způsobit, že konvergence bude v nekonečném čase nebo nebude vůbec konvergovat. Budete muset funkci přizpůsobit tak, abyste se tomu vyhnuli, např. zaměnit "parametr" za "1e9*parametr" v definici funkce a vydělit počáteční hodnoty číslem 1e9.
Pokud můžete navrhnout funkci jako lineární kombinaci jednoduchých funkcí, které jsou váženy pomocí parametrů aproximace, udělejte to tak za každou cenu. Toto velmi pomáhá, protože problém už není nelineární a měl by konvergovat po malém počtu iterací, snad jen po jedné.
Některé předpisy pro analyzování dat získané v praktických experimentálních kurzech mohou předem přiřazovat některé funkce k vašim datům, třeba ve vícekrokových procesech počítaných pro více aspektů základní teorie jedna po jedné (one by one). Potom se skutečně žádaná informace vytáhne z aproximačních parametrů těchto funkcí. Pomocí příkazu fit lze toto udělat často v jednom kroku tím, že napíšete modelovou funkci přímo v podmínkách žádaných parametrů. Transformaci dat se lze též často vyhnout i za cenu složitějšího problému aproximace. Pokud si myslíte, že to odporuje předcházejícímu odstavci, který se týká zjednodušování aproximační funkce, máte pravdu.
Zpráva "singulární matice" (singular matrix) znamená, že toto použití Marquardt-Levenbergova algoritmu nemůže vypočítat hodnoty parametrů pro další iteraci. Zkuste odlišné počáteční hodnoty, zápis funkce v jiné formě nebo jednodušší funkci.
Nakonec je tu milá citace z manuálu dalšího aproximačního balíku (fudgit), která sumarizuje všechny tyto poznatky: "Nelineární aproximace je umění!"