Gibbs sampling je algoritmus pro generování vzorku společného rozdělení množiny náhodných proměnných . Používá se k odhadu společného rozdělení a k výpočtu integrálů Monte Carlo . Tento algoritmus je speciálním případem algoritmu Metropolis-Hastings a je pojmenován po fyzikovi Josiahu Gibbsovi .
Gibbsovo vzorkování je pozoruhodné v tom, že nevyžaduje explicitní společné rozdělení, ale pouze podmíněné pravděpodobnosti pro každou proměnnou v rozdělení. Algoritmus v každém kroku vezme jednu náhodnou proměnnou a zvolí její hodnotu za předpokladu, že ostatní jsou pevné. Lze ukázat, že posloupnost získaných hodnot tvoří opakující se Markovův řetězec , jehož stabilní rozdělení je právě požadované společné rozdělení.
Gibbsovo vzorkování se používá v případech, kdy je společné rozdělení náhodných veličin velmi velké nebo explicitně neznámé, ale podmíněné pravděpodobnosti jsou známé a mají jednoduchý tvar. Gibbsovo vzorkování se zvláště dobře používá pro řešení posteriorní pravděpodobnosti v bayesovských sítích , protože jim jsou dány všechny nezbytné podmíněné pravděpodobnosti.
Nechť existuje společné rozdělení pro náhodné proměnné a může být velmi velké. Předpokládejme , že jsme již v kroku vybrali nějakou hodnotu . V každém kroku se provádějí následující akce:
V praxi se index obvykle nevybírá náhodně, ale postupně. Algoritmus je jednoduchý a nevyžaduje žádné speciální znalosti a předpoklady, a proto je oblíbený.
Nechť existuje společné rozdělení tří náhodných proměnných, z nichž každá je v rozsahu od 0 do 10.
Předpokládáme, že počáteční hodnota vektoru, od kterého iterační proces začíná, bude .
Dále zafixujeme a , poté vypočítáme podmíněnou pravděpodobnost pomocí předem známého vzorce , to znamená , že získáme nějaký graf hustoty pravděpodobnosti proměnné . To, co jsme původně nastavili na 5, zapomeneme, tato hodnota již nebude potřeba.
Nyní je potřeba provést vzorkování - vygenerovat novou náhodnou hodnotu pro v souladu se získanou hustotou pravděpodobnosti. Vzorkování lze provádět například podle algoritmu vzorkování rozptylu . K tomu se vygeneruje náhodné číslo s rovnoměrným rozdělením od 0 do 10, načež se pro toto vygenerované číslo vypočte jeho pravděpodobnost podle grafu hustoty pravděpodobnosti .
Nechť se vygeneruje například náhodné číslo 4 a podle grafu hustoty je jeho pravděpodobnost 0,2. Potom podle algoritmu vzorkování rozptylu přijmeme toto vygenerované číslo s pravděpodobností 0,2. A k tomu zase vygenerujeme další náhodné číslo od 0 do 1 s rovnoměrným rozdělením, a pokud se vygeneruje číslo menší než 0,2, pak přijmeme číslo 4 jako úspěšné. Jinak opakujeme od začátku - vygenerujeme další číslo (například vypadne 3), pro něj najdeme pravděpodobnost (například 0,3), pro něj vygenerujeme další číslo od 0 do 1 (například 0,1) a pak to v této iteraci konečně přijmeme .
Dále je třeba zopakovat všechny výše uvedené kroky s hodnotou , a již používáme „nové“ - v našem příkladu rovné 3. Vypočítáme tedy hustotu pravděpodobnosti , vygenerujeme opět náhodné číslo pro roli kandidáta pro novou hodnotu vytvořte vzorek s odchylkou a opakujte jej, pokud je hodnota "zamítnuta".
Podobně se akce opakují pro s novými hodnotami a . První iterace Gibbsova vzorkovacího algoritmu byla dokončena. Po několika stovkách/tisících takových iterací by náhodné hodnoty měly dosáhnout maxima své hustoty, která může být umístěna dostatečně daleko od naší první aproximace a vzorkována v této oblasti. Dalších tisíc iterací lze již použít pro zamýšlený účel (například pro hledání matematického očekávání ) jako vzorek hodnot požadovaného rozdělení, které nezávisí na původním vektoru .