日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重要性采样原理及实现

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重要性采样原理及实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原理:

重要性采樣主要用于難以直接采樣的數據分布上,采樣是指從已知的某個分布采樣一些數據進行后續運算,但是數據分布比較復雜不容易進行采樣,針對這種問題使用蒙特卡羅法,例如:

復雜的概率密度函數p(x),求解隨機變量基于此概率下的某個數學期望,根據蒙特卡羅法轉換為

雖然p(x)比較復雜,但是我們可以對上面的公式進行一些變換,使用常見的分布采樣,復雜的采樣分布為p(x),另一個簡單的可采樣且定義域與p(x)相同的概率密度函數q(x),因此可以得到:

代碼

  • #encoding=utf-8??
  • ??
  • """?
  • ????created?on??2018-08-12?
  • ????@author?wt?
  • ????Description:重要性采樣表示從某一個分布獲取某些數據,并利用這些數據完成更多的運算?
  • ????當某一個密度函數很復雜的時候可以采用近似他的分布代替它?
  • """??
  • ??
  • import?numpy?as?np??
  • import?math??
  • ??
  • """x服從的分布"""??
  • def?gaussian(x,u,sigma):??
  • ????return?math.exp(-(x-u)**2/(2*sigma*sigma))/math.sqrt(2*math.pi*sigma*sigma)??
  • ??
  • def?importance_sampling(sigma,sample_sigma):??
  • ??
  • ????"""作用相當于取f(x)"""??
  • ????origin?=?[]??
  • ????for?i?in?range(100000):??
  • ????????a?=?np.random.normal(1.0,sigma)??
  • ????origin.append(a)??
  • ??
  • ????sample?=?[]??
  • ????for?i?in?range(100000):??
  • ????????"""計算f(x)的值"""??
  • ????????fx?=?np.random.normal(1.0,sample_sigma)??
  • ??
  • ????????"""原始復雜分布為px,現找同分布的q(x)來代替"""??
  • ????????qx?=?gaussian(a,1.0,sample_sigma)??
  • ????????px?=?gaussian(a,1.0,sigma)??
  • ????sample.append(fx*px/qx)??
  • ??
  • ????origin?=?np.array(origin)??
  • ????sample?=?np.array(sample)??
  • ????print(np.mean(origin),np.std(origin))??
  • ????print(np.mean(sample),np.std(sample))??
  • ??
  • importance_sampling(1.0,1.0)??
  • importance_sampling(1.0,0.5)??
  • importance_sampling(1.0,2)??
  • ??
  • xs?=?np.linspace(-10,10,101)??
  • y1?=?[gaussian(x,1.0,1.0)?for?x?in?xs]??
  • y2?=?[gaussian(x,1.0,0.5)?for?x?in?xs]??
  • y3?=?[gaussian(x,1.0,2)?for?x?in?xs]??
  • ??
  • import?matplotlib.pyplot?as?plt??
  • ??
  • fig?=?plt.figure(figsize=(8,5))??
  • plt.plot(xs,y1,label='sigma=1.0')??
  • plt.plot(xs,y2,label='sigma=0.5',linestyle=':')??
  • plt.plot(xs,y3,label='sigma=2.0',linestyle='--')??
  • plt.legend()??
  • plt.show()??
  • 結果:
  • 方差更應該使用1.0和2.0的分布,方差取0.5時出現采樣分布不均勻情況,結果略差一些
  • 總結

    以上是生活随笔為你收集整理的重要性采样原理及实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。