Rumah  >  Artikel  >  Peranti teknologi  >  Terokai prinsip asas dan proses pelaksanaan algoritma pensampelan bersarang

Terokai prinsip asas dan proses pelaksanaan algoritma pensampelan bersarang

PHPz
PHPzke hadapan
2024-01-22 21:51:171062semak imbas

Terokai prinsip asas dan proses pelaksanaan algoritma pensampelan bersarang

Algoritma pensampelan bersarang ialah algoritma inferens statistik Bayesian yang cekap digunakan untuk mengira kamiran atau penjumlahan di bawah taburan kebarangkalian kompleks. Ia berfungsi dengan menguraikan ruang parameter kepada berbilang hiperkubus dengan isipadu yang sama, dan secara beransur-ansur dan berulang "menolak keluar" salah satu hiperkubus volum terkecil, dan kemudian mengisi hiperkubus dengan sampel rawak untuk menganggarkan nilai kamiran taburan kebarangkalian dengan lebih baik. Melalui lelaran berterusan, algoritma pensampelan bersarang boleh memperoleh nilai kamiran ketepatan tinggi dan sempadan ruang parameter, yang boleh digunakan untuk masalah statistik seperti perbandingan model, anggaran parameter, dan pemilihan model. Idea teras algoritma ini adalah untuk mengubah masalah penyepaduan kompleks kepada satu siri masalah penyepaduan mudah, dan mendekati nilai kamiran sebenar dengan mengurangkan jumlah ruang parameter secara beransur-ansur. Setiap langkah lelaran memperoleh sampel daripada ruang parameter melalui persampelan rawak dan melakukan pengiraan wajaran mengikut fungsi ketumpatan kebarangkalian sampel untuk mendapatkan anggaran nilai kamiran. Kelebihan algoritma persampelan bersarang ialah ia boleh mengendalikan pelbagai taburan kebarangkalian kompleks dan berprestasi baik dari segi kecekapan dan ketepatan pengiraan.

Algoritma persampelan bersarang pada asalnya dicadangkan oleh Skilling pada tahun 2004. Ia digunakan secara meluas dalam analisis data dan perbandingan model dalam astronomi, statistik, fizik, biologi dan bidang lain. Di bawah ini kami akan memperkenalkan idea asas dan proses pelaksanaan algoritma pensampelan bersarang melalui contoh mudah.

Andaikan kita mempunyai fungsi ketumpatan kebarangkalian p(x) bagi taburan normal, dan kita ingin mengira nilai kamirannya sepanjang keseluruhan selang nombor nyata, iaitu, selesaikan ∫p(x)dx. Mengikut sifat taburan normal, kita tahu bahawa nilai kamiran p(x) ialah 1. Untuk mengesahkan sifat ini, kami boleh menggunakan algoritma pensampelan bersarang untuk pengiraan. Idea asas algoritma ini adalah untuk menganggarkan nilai kamiran dengan mengambil sampel secara rawak pada taburan normal dan melakukan penjumlahan wajaran bagi titik pensampelan. Dengan berulang kali melakukan proses pensampelan dan penjumlahan wajaran, kita boleh mendapatkan nilai kamiran yang cukup hampir dengan 1 untuk mengesahkan sifat taburan normal.

Pertama, kita menguraikan ruang parameter [-∞, ∞] kepada berbilang hiperkubus V_i dengan isipadu yang sama Isipadu setiap hiperkubus ialah ΔV = 1/N, dengan N ialah bilangan hiperkubus. Kami menggunakan x_i untuk mewakili sampel rawak dalam hiperkubus ke-i, dan kemudian mengira nilai p(x_i). Untuk memastikan setiap hypercube boleh diisi, kita perlu mengambil sampel secara rawak beberapa sampel daripada satu hypercube dan mengisi sampel ini ke dalam hypercube lain. Dengan cara ini, setiap hypercube diisi dan kami mendapat anggaran yang lebih tepat tentang fungsi ketumpatan kebarangkalian.

Kemudian, kita perlu memilih hypercube V_{text{min}} yang nilai fungsi ketumpatan kebarangkaliannya adalah yang paling kecil. Untuk melaksanakan proses ini, kita perlu mengalih keluar sampel dengan nilai fungsi ketumpatan kebarangkalian terkecil dalam V_{text{min}}, iaitu, mengalih keluar semua sampel dengan nilai fungsi ketumpatan kebarangkalian terkecil dalam x_i daripada V_{text{min }}. Semasa proses ini, kita perlu merekodkan volum dan nilai fungsi ketumpatan kebarangkalian minimum bagi V_{text{min}} dan menggunakannya sebagai nilai rujukan untuk lelaran seterusnya.

Ulang proses di atas sehingga semua hiperkubus "ditolak keluar", di mana kita mempunyai anggaran fungsi ketumpatan kebarangkalian yang lengkap dan anggaran nilai kamiran. Proses pelaksanaan khusus adalah seperti berikut:

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)

Antaranya, N mewakili bilangan hiperkubus, log_kemungkinan ialah nilai logaritma fungsi ketumpatan kebarangkalian, log_X ialah nilai anggaran nilai kamiran logaritma, logL ialah nilai logaritma bagi nilai fungsi ketumpatan kebarangkalian minimum dalam setiap hypercube , np.logaddexp ialah fungsi penambahan logaritma, digunakan untuk mengelakkan aliran bawah atau limpahan berangka.

Dalam kod di atas, kami mula-mula mentakrifkan log_kemungkinan fungsi ketumpatan kebarangkalian bagi taburan normal, dan kemudian melaksanakan algoritma pensampelan bersarang melalui fungsi nested_sampling. Dalam fungsi ini, kita mula-mula memulakan nilai log_X kepada infiniti negatif, kemudian lelaran melalui gelung N kali untuk mencari sampel dengan nilai fungsi ketumpatan kebarangkalian terkecil, mengira isipadu semasa dan nilai fungsi ketumpatan kebarangkalian, mengemas kini nilai log_X dan logL, dan Kembalikan hasil akhir.

Perlu diingat bahawa kami tidak mengira secara langsung nilai kamiran dalam kod di atas, tetapi mengira nilai logaritma log_X Ini kerana dalam pengiraan sebenar, nilai fungsi ketumpatan kebarangkalian biasanya sangat kecil, yang mungkin menyebabkan aliran bawah atau limpahan berangka. Oleh itu, kami biasanya mengira kamiran menggunakan nilai logaritma, yang mengelakkan masalah berangka dan membolehkan pengendalian produk dan kamiran fungsi ketumpatan kebarangkalian yang lebih baik.

Algoritma persampelan bersarang ialah algoritma inferens statistik yang sangat berkesan yang boleh digunakan untuk mengira kamiran atau penjumlahan di bawah taburan kebarangkalian kompleks. Idea utamanya adalah untuk menguraikan ruang parameter kepada berbilang hiperkubus dengan isipadu yang sama, dan kemudian teruskan berulang dengan pensampelan secara rawak dan "menolak keluar" hiperkubus untuk mendapatkan nilai integral ketepatan tinggi dan sempadan ruang parameter. Algoritma persampelan bersarang digunakan secara meluas dalam analisis data dan perbandingan model dalam astronomi, statistik, fizik, biologi dan bidang lain.

Atas ialah kandungan terperinci Terokai prinsip asas dan proses pelaksanaan algoritma pensampelan bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:163.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam