En este tutorial, exploramos la regresión bayesiana jerárquica con NumPyro y recorremos todo el flujo de trabajo de manera estructurada. Comenzamos generando datos sintéticos, luego definimos un modelo probabilístico que captura tanto patrones globales como variaciones a nivel de grupo. A través de cada fragmento, configuramos la inferencia utilizando NUTS, analizamos distribuciones posteriores y realizamos comprobaciones predictivas posteriores para comprender qué tan bien nuestro modelo captura la estructura subyacente. Al abordar el tutorial paso a paso, desarrollamos una comprensión intuitiva de cómo NumPyro permite el modelado bayesiano flexible y escalable. Consulte los códigos completos aquí.
Configuramos nuestro entorno instalando NumPyro e importando todas las bibliotecas necesarias. Preparamos JAX, NumPyro y herramientas de trazado para tener todo listo para la inferencia bayesiana. Mientras ejecutamos esta celda, nos aseguramos de que nuestra sesión de Colab esté completamente equipada para el modelado jerárquico. Consulte los códigos completos aquí.
b = verdadero_beta + beta_g[group_ids]
y = a + b * x + eps df = pd.DataFrame({“y”: np.array(y), “x”: np.array(x), “group”: group_ids}) verdad = dict(true_alpha=true_alpha, true_beta=true_beta, sigma_alpha_group=sigma_alpha_g, sigma_beta_group=sigma_beta_g, sigma_eps=sigma_eps) devuelve df, clave de verdad = aleatorio.PRNGKey(0) df, verdad = generar_datos(clave) x = jnp.array(df[“x”].valores) y = jnp.array(df[“y”].valores) grupos = jnp.array(df[“group”].valores) n_grupos = int(df[“group”].nunique())
Generamos datos jerárquicos sintéticos que imitan la variación a nivel de grupo del mundo real. Convertimos estos datos en matrices compatibles con JAX para que NumPyro pueda procesarlos de manera eficiente. Al hacer esto, sentamos las bases para adaptar un modelo que aprenda tanto de las tendencias globales como de las diferencias grupales. Consulte los códigos completos aquí.
beta = beta_g[group_idx]
media = alfa + beta * x con numpyro.plate(“datos”, x.forma[0]): numpyro.sample(“y”, dist.Normal(media, sigma_obs), obs=y) nueces = NUTS(modelo_de_regresión_jerárquica, target_accept_prob=0.9) mcmc = MCMC(nueces, num_warmup=1000, num_samples=1000, num_chains=1, Progress_bar=True) mcmc.run(random.PRNGKey(1), x=x, group_idx=grupos, n_groups=n_groups, y=y) muestras = mcmc.get_samples()
Definimos nuestro modelo de regresión jerárquica y lanzamos el muestreador MCMC basado en NUTS. Permitimos que NumPyro explore el espacio posterior y aprenda parámetros como intersecciones de grupo y pendientes. A medida que se completa este muestreo, obtenemos ricas distribuciones posteriores que reflejan incertidumbre en todos los niveles. Consulte los códigos completos aquí.
orden = np.argsort(x_g) x_sorted = x_g[order]
y_rep_sorted = y_rep_g[:, order]
y_med = np.median(y_rep_sorted, eje=0) y_lo, y_hi = np.percentile(y_rep_sorted, [5, 95]eje=0) plt.figure(figsize=(8, 5)) plt.scatter(x_g, y_g) plt.plot(x_sorted, y_med) plt.fill_between(x_sorted, y_lo, y_hi, alpha=0.3) plt.show()
Analizamos nuestras muestras posteriores calculando resúmenes y realizando comprobaciones predictivas posteriores. Visualizamos qué tan bien el modelo recrea los datos observados para un grupo seleccionado. Este paso nos ayuda a comprender con qué precisión nuestro modelo captura el proceso generativo subyacente. Consulte los códigos completos aquí.
Trazamos las intersecciones y pendientes estimadas a nivel de grupo para comparar sus patrones aprendidos con los valores verdaderos. Exploramos cómo se comporta cada grupo y cómo se adapta el modelo a sus diferencias. Esta visualización final reúne la imagen completa de la inferencia jerárquica.
En conclusión, implementamos cómo NumPyro nos permite modelar relaciones jerárquicas con claridad, eficiencia y un fuerte poder expresivo. Observamos cómo los resultados posteriores revelan efectos globales y específicos de grupo significativos, y cómo las comprobaciones predictivas validan el ajuste del modelo a los datos generados. A medida que juntamos todo, ganamos confianza en la construcción, ajuste e interpretación de modelos jerárquicos utilizando la inferencia basada en JAX. Este proceso fortalece nuestra capacidad de aplicar el pensamiento bayesiano a conjuntos de datos más ricos y realistas donde la estructura multinivel es esencial.
Consulte los códigos completos aquí. No dude en consultar nuestra página de GitHub para tutoriales, códigos y cuadernos. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.
Asif Razzaq es el director ejecutivo de Marktechpost Media Inc.. Como emprendedor e ingeniero visionario, Asif está comprometido a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, Marktechpost, que se destaca por su cobertura en profundidad del aprendizaje automático y las noticias sobre aprendizaje profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el público.
🙌 Siga MARKTECHPOST: agréguenos como fuente preferida en Google.