L'algorithme d'échantillonnage imbriqué est un algorithme d'inférence statistique bayésien efficace utilisé pour calculer l'intégrale ou la sommation sous des distributions de probabilité complexes. Il fonctionne en décomposant l'espace des paramètres en plusieurs hypercubes de volume égal, et en « poussant » progressivement et itérativement l'un des hypercubes de plus petit volume, puis en remplissant l'hypercube avec des échantillons aléatoires pour mieux estimer la valeur intégrale de la distribution de probabilité. Grâce à une itération continue, l'algorithme d'échantillonnage imbriqué peut obtenir des valeurs intégrales et des limites de l'espace des paramètres de haute précision, qui peuvent être appliquées à des problèmes statistiques tels que la comparaison de modèles, l'estimation des paramètres et la sélection de modèles. L'idée principale de cet algorithme est de transformer des problèmes d'intégration complexes en une série de problèmes d'intégration simples et d'approcher la véritable valeur intégrale en réduisant progressivement le volume de l'espace des paramètres. Chaque étape d'itération obtient des échantillons de l'espace de paramètres par échantillonnage aléatoire et effectue des calculs pondérés en fonction de la fonction de densité de probabilité des échantillons pour obtenir une estimation de la valeur intégrale. L'avantage de l'algorithme d'échantillonnage imbriqué est qu'il peut gérer diverses distributions de probabilité complexes et présente de bonnes performances en termes d'efficacité et de précision de calcul.
L'algorithme d'échantillonnage imbriqué a été initialement proposé par Skilling en 2004. Il est largement utilisé dans l'analyse de données et la comparaison de modèles en astronomie, statistiques, physique, biologie et dans d'autres domaines. Ci-dessous, nous présenterons l'idée de base et le processus de mise en œuvre de l'algorithme d'échantillonnage imbriqué à travers un exemple simple.
Supposons que nous ayons une fonction de densité de probabilité p(x) d'une distribution normale et que nous voulions calculer sa valeur intégrale sur tout l'intervalle de nombres réels, c'est-à-dire résoudre ∫p(x)dx. D’après les propriétés de la distribution normale, nous savons que la valeur intégrale de p(x) est 1. Afin de vérifier cette propriété, nous pouvons utiliser l'algorithme d'échantillonnage imbriqué pour le calcul. L'idée de base de cet algorithme est d'approcher la valeur intégrale en échantillonnant aléatoirement sur une distribution normale et en effectuant une sommation pondérée des points d'échantillonnage. En effectuant à plusieurs reprises le processus d'échantillonnage et de sommation pondérée, nous pouvons obtenir une valeur intégrale suffisamment proche de 1 pour vérifier les propriétés de la distribution normale.
Tout d'abord, nous décomposons l'espace des paramètres [-∞, ∞] en plusieurs hypercubes V_i de volumes égaux. Le volume de chaque hypercube est ΔV = 1/N, où N est le nombre d'hypercubes. Nous utilisons x_i pour représenter un échantillon aléatoire dans le i-ième hypercube, puis calculons la valeur de p(x_i). Pour garantir que chaque hypercube peut être rempli, nous devons échantillonner au hasard certains échantillons d'un hypercube et remplir ces échantillons dans d'autres hypercubes. De cette façon, chaque hypercube sera rempli et nous pourrons obtenir une estimation plus précise de la fonction de densité de probabilité.
Ensuite, nous devons sélectionner un hypercube V_{text{min}} dont la valeur de la fonction de densité de probabilité est la plus petite. Afin de mettre en œuvre ce processus, nous devons supprimer l'échantillon avec la plus petite valeur de fonction de densité de probabilité dans V_{text{min}}, c'est-à-dire supprimer tous les échantillons avec la plus petite valeur de fonction de densité de probabilité dans x_i de V_{text{min }}. Au cours de ce processus, nous devons enregistrer le volume et la valeur minimale de la fonction de densité de probabilité de V_{text{min}} et les utiliser comme valeur de référence pour la prochaine itération.
Répétez le processus ci-dessus jusqu'à ce que tous les hypercubes soient "expulsés", auquel cas nous avons une estimation complète de la fonction de densité de probabilité et une approximation de la valeur intégrale. Le processus de mise en œuvre spécifique est le suivant :
import numpy as np def log_likelihood(x): """定义概率密度函数""" return -0.5 * x ** 2 def nested_sampling(N, log_likelihood): """嵌套采样算法实现""" log_X = -np.inf logL = [log_likelihood(np.random.randn()) for i in range(N)] for i in range(N): # 找到最小的概率密度函数值的样本 idx = np.argmin(logL) logL[idx] = np.inf # 计算当前的体积和概率密度函数值 log_X_new = logL[idx] - np.log(N - i) logL_new = log_likelihood(np.random.randn()) # 更新 X 和 logL log_X = np.logaddexp(log_X,log_X_new) logL[idx] = logL_new # 返回结果 return log_X, log_X - np.log(N)
Parmi eux, N représente le nombre d'hypercubes, log_likelihood est la valeur logarithmique de la fonction de densité de probabilité, log_X est la valeur approximative de la valeur intégrale logarithmique, logL est la valeur logarithmique de la valeur minimale de la fonction de densité de probabilité dans chaque hypercube, np.logaddexp est une fonction d'addition logarithmique, utilisée pour éviter un sous-débordement ou un débordement numérique.
Dans le code ci-dessus, nous définissons d'abord une fonction de densité de probabilité log_likelihood d'une distribution normale, puis implémentons l'algorithme d'échantillonnage imbriqué via la fonction nested_sampling. Dans cette fonction, nous initialisons d'abord la valeur de log_X à l'infini négatif, puis parcourons la boucle N fois pour trouver l'échantillon avec la plus petite valeur de la fonction de densité de probabilité, calculons le volume actuel et la valeur de la fonction de densité de probabilité, mettons à jour les valeurs de log_X et logL, et renvoie le résultat final.
Il convient de noter que nous n'avons pas calculé directement la valeur intégrale dans le code ci-dessus, mais avons calculé sa valeur logarithmique log_X En effet, dans les calculs réels, la valeur de la fonction de densité de probabilité est généralement très petite, ce qui peut. provoquer un dépassement ou un dépassement numérique. Par conséquent, nous calculons généralement les intégrales en utilisant des valeurs logarithmiques, ce qui évite les problèmes numériques et permet une meilleure gestion des produits et des intégrales des fonctions de densité de probabilité.
L'algorithme d'échantillonnage imbriqué est un algorithme d'inférence statistique très efficace qui peut être utilisé pour calculer l'intégrale ou la sommation sous des distributions de probabilité complexes. Son idée principale est de décomposer l'espace des paramètres en plusieurs hypercubes de volumes égaux, puis d'itérer en continu en échantillonnant au hasard et en « poussant » l'hypercube pour obtenir des valeurs intégrales et des limites de haute précision de l'espace des paramètres. Les algorithmes d'échantillonnage imbriqués sont largement utilisés dans l'analyse de données et la comparaison de modèles en astronomie, statistiques, physique, biologie et dans d'autres domaines.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!