Simulación de actualización bayesiana con lanzamiento de moneda
Simula el proceso de lanzar una moneda repetidamente y utiliza la fórmula de Bayes para actualizar en tiempo real la distribución de creencias sobre si la moneda está manipulada.
Al completar este caso, comprenderás:El núcleo del método bayesiano: cada vez que se observa un nuevo dato, se actualiza la creencia con la función de verosimilitud.
Introducción desde la vida real
¿Es confiable el nuevo colega?
El primer día, no conoces al nuevo colega (prior: podría ser confiable o no, 50% cada uno). La primera semana, completa las tareas a tiempo cada vez (nueva evidencia), empiezas a pensar que «probablemente es confiable». La segunda semana, vuelve a completarlas a tiempo (más evidencia), tu juicio se vuelve más seguro.
Tu juicio es la probabilidad posterior: el resultado de corregir continuamente el juicio inicial con nueva evidencia. Esta es la intuición de la actualización bayesiana.
Comprensión intuitiva
Tenemos una moneda, pero no sabemos cuál es su probabilidad de cara. Prior: antes de lanzarla, consideramos que cualquier probabilidad de cara (de 0 a 1) es posible. Verosimilitud: cada vez que vemos un resultado, actualizamos usando «si la probabilidad de cara es theta, la posibilidad de ver este resultado». Posterior: la distribución de creencias actualizada: cuantos más datos, más se concentra la distribución cerca del valor real.
Definición matemática
\[ P(\theta \mid \text{data}) = \frac{P(\text{data} \mid \theta) \cdot P(\theta)}{P(\text{data})} \] \[ \text{posterior}_t \propto \text{verosimilitud}(\text{resultado } t \mid \theta) \times \text{posterior}_{t-1} \]Práctica con Python
Ejemplo
np.random.seed(1)
true_p = 0.75 # Probabilidad real de cara de la moneda (fingimos no saberla)
theta_grid = np.linspace(0, 1, 200)
# Prior: todas las theta son igualmente probables
prior = np.ones_like(theta_grid)
prior /= prior.sum()
# Simular 40 lanzamientos de moneda
flips = np.random.binomial(1, true_p, size=40)
posterior = prior.copy()
print("EJEMPLO Proceso de actualización bayesiana (theta real=0.75):\n")
for i, outcome in enumerate(flips, start=1):
likelihood = theta_grid if outcome == 1 else (1 - theta_grid)
posterior = posterior * likelihood
posterior /= posterior.sum()
if i % 10 == 0:
est = theta_grid[np.argmax(posterior)]
print(f" Después de {i:2d} lanzamientos, theta más probable = {est:.3f}")
# Comparación de incertidumbre
prior_std = np.sqrt(np.sum(theta_grid**2 * prior) - np.sum(theta_grid * prior)**2)
post_std = np.sqrt(np.sum(theta_grid**2 * posterior) - np.sum(theta_grid * posterior)**2)
print(f"\nEJEMPLO Desviación estándar previa: {prior_std:.4f} -> Desviación estándar posterior: {post_std:.4f} (se redujo {prior_std/post_std:.1f} veces)")
EJEMPLO 贝叶斯更新过程 (真实 theta=0.75): 抛 10 次后,最可能的 theta=0.754 抛 20 次后,最可能的 theta=0.769 抛 30 次后,最可能的 theta=0.759 抛 40 次后,最可能的 theta=0.774 EJEMPLO 先验标准差: 0.2890 -> 后验标准差: 0.0642 (缩小了 4.5 倍)
Escenarios de aplicación en IA
| Escenario | Función del método bayesiano |
|---|---|
| Clasificación Naive Bayes | Fórmula de Bayes + suposición de independencia de características → clasificador clásico |
| Optimización bayesiana | Usar prior + datos observados → proceso gaussiano posterior → guiar la búsqueda de hiperparámetros |
| Inferencia variacional | Aproximar una posterior compleja con una distribución simple: la base matemática de VAE |