El algoritmo de muestreo de Gibbs es una solución a una pregunta básica e importante: ¿cómo muestreas los valores de una distribución de probabilidad?
Veamos primero casos simples. Suponga que su distribución tiene una sola variable X que toma dos valores:
P (X = 0) = 0.5 y P (X = 1) = 0.5
- ¿Se recomienda que un desarrollador Java experimentado aprenda y pase al aprendizaje automático? ¿Qué tan difícil / fácil es?
- ¿Es razonable excluir valores atípicos en su conjunto de datos de entrenamiento para su clasificador?
- Cómo lidiar con una variable independiente categórica que tiene más de 500 variables en un problema de clasificación
- ¿Existe una lista de conferencias de minería de datos / aprendizaje automático organizadas en los Estados Unidos?
- ¿Los algoritmos subyacentes permiten a Shazam identificar una canción y Amazon Flow para identificar una imagen básicamente igual?
¿Cómo muestreas un valor de X? Simple, lanza una moneda. Si sus cabezas, X = 1, de lo contrario X = 0. Y si usted es un programa de computadora, llame a rand () (o cualquier generador uniforme de números aleatorios de su elección) y si rand ()> 0.5, entonces X = 1, de lo contrario X = 0.
(Nota: asumimos que rand () devuelve números reales en el intervalo [0,1])
Esta fue una distribución binomial . ¿Qué pasa si tienes una distribución multinomial ? Digamos que quieres modelar el lanzamiento de un dado:
P (X = i) = 1/6, para i en 1 … 6
Simple. Llame a rand () nuevamente, pero divida el intervalo [0,1] en 6 partes iguales, y devuelva el valor de X correspondiente a la parte en la que cae el valor de rand (). (Por supuesto, si eres un ser humano sano, simplemente lanzas un dado. Pero aquí estamos hablando de computadoras).
Todo esto fue agradable y fácil. Vamos a darle vida. ¿Qué sucede si tiene una distribución multinomial en más de una variable?
P (X_1, X_2, … X_n)
Hay casos en que incluso esto resulta ser un juego de niños. Por ejemplo, si las variables son independientes , puede factorizar la distribución multivariada como un producto de distribuciones univariadas y tomar muestras de cada una de ellas por separado como antes, simplificando la vida (de la computadora).
P (X_1, X_2, … X_n) = P (X_1) * P (X_2) * … * P (X_n)
Muestras de cada P (X_i) para obtener un valor de X_i, y así obtener un conjunto de valores para todos X_1 … X_n.
Pero no nos gustan los problemas fáciles. Queremos el tipo duro y general. Supongamos que es difícil tomar muestras directamente de la distribución conjunta , es decir P (X_1, X_2, … X_n). Es importante apreciar la inutilidad de nuestro enfoque anterior en este entorno general. Es posible que la distribución no tenga una forma “buena” como una distribución binomial o multinomial, y puede que tampoco tenga factorización en tales distribuciones “buenas”.
El muestreo de Gibbs proporciona un método para aproximar eficientemente esta distribución conjunta bajo una condición: deberíamos poder muestrear fácilmente de la distribución condicional de cada X_i, es decir, P (X_i | X_1 … X_ (i-1), X_ (i + 1) … X_n).
(Nota: esta condición se cumple al realizar inferencias en las redes bayesianas, que es una de las aplicaciones más importantes del muestreo de Gibbs desde una perspectiva de aprendizaje automático).
El truco es que muestreas iterativamente de la distribución condicional de cada X_i, ciclando el valor de i de 1 a n, una gran cantidad de veces. De este modo, obtienes una secuencia de muestras de X_i:
X_1_0 … X_n_0, X_1_1 … X_n_1, X_1_2 … X_n_2 … X_1_k … X_n_k …
que agrupamos como tuplas de (X_1 … X_n):
(X_1 … X_n) _0, (X_1 … X_n) _1, (X_1 … X_n) _2 … (X_1 … X_n) _k …
(¡Perdona la notación!)
La página de wikipedia ofrece una descripción formal de este proceso http://en.wikipedia.org/wiki/Gib…. Pero debería ser suficiente decir que si cada distribución condicional es una distribución multinomial (o alguna otra distribución “buena”), entonces usted muestra una X_i usando nuestro enfoque anterior. Mientras muestrea un X_i particular, fija los valores de las otras variables a sus últimos valores muestreados. Además, comienza con cualquier asignación aleatoria a las variables, porque resulta que la asignación inicial no importa.
¡La teoría es que, cuando haces esto una gran cantidad de veces, terminas con algo muy cercano a una muestra tomada de la distribución conjunta real! (Por supuesto, con un * que dice ‘se aplican condiciones’).
Sin embargo, podemos vivir con las condiciones, dos de las cuales son:
- La secuencia de muestras aleatorias {X_1 … X_n} obtenidas forman una Cadena de Markov, con muestras cercanas que están correlacionadas. Entonces, si se requieren muestras independientes, solo toma muestras que están muy separadas entre sí en la secuencia, es decir, solo toma aquellas para las cuales k = 100, 200, 300, etc.
- Hay un período inicial de quemado, es decir, las muestras iniciales en la secuencia no representan con precisión la distribución conjunta. Entonces, simplemente suelta las primeras muestras, es decir, comienza con la muestra en k = 100 (o 1000 si lo desea)
En otras palabras, para k grande, (X_1 … X_n) _k se acerca a una muestra tomada de la distribución conjunta original P (X_1, X_2, … X_n).
Este es un resultado bastante sorprendente (y útil). Sin embargo, resulta ser algo bastante común entre los algoritmos MCMC como este.