成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Python中使用逆變換方法生成隨機變量

開發(fā) 后端
在仿真理論中,生成隨機變量是最重要的“構(gòu)建塊”之一,而這些隨機變量大多是由均勻分布的隨機變量生成的。其中一種可以用來產(chǎn)生隨機變量的方法是逆變換法。在本文中,我將向您展示如何使用Python中的逆變換方法生成隨機變量(包括離散和連續(xù)的情況)。

目標(biāo)

在仿真理論中,生成隨機變量是最重要的“構(gòu)建塊”之一,而這些隨機變量大多是由均勻分布的隨機變量生成的。其中一種可以用來產(chǎn)生隨機變量的方法是逆變換法。在本文中,我將向您展示如何使用Python中的逆變換方法生成隨機變量(包括離散和連續(xù)的情況)。

[[388329]]

概念

給定隨機變量U,其中U在(0,1)中均勻分布。 假設(shè)我們要生成隨機變量X,其中累積分布函數(shù)(CDF)為: 

在Python中使用逆變換方法生成隨機變量 

逆變換方法的思想是通過如下使用其逆CDF從任何概率分布中生成一個隨機數(shù)。 

在Python中使用逆變換方法生成隨機變量 

對于離散隨機變量,步驟略有不同。假設(shè)我們想生成一個離散隨機變量X的值,它具有一個概率質(zhì)量函數(shù)(PMF) 

在Python中使用逆變換方法生成隨機變量 

為了生成X的值,需要生成一個隨機變量U,U在(0,1)中均勻分布,并且定義 

在Python中使用逆變換方法生成隨機變量 

通過以上步驟,我們可以按如下方法創(chuàng)建逆變換方法的算法。 

在Python中使用逆變換方法生成隨機變量

 

連續(xù)隨機數(shù)代碼實現(xiàn)

首先,我們實現(xiàn)此方法以生成連續(xù)隨機變量。 假設(shè)我們要模擬一個隨機變量X,該變量遵循均值λ(即X〜EXP(λ))的指數(shù)分布。 我們知道指數(shù)分布的概率分布函數(shù)(PDF)是 

在Python中使用逆變換方法生成隨機變量

 CDF如下 

在Python中使用逆變換方法生成隨機變量 

然后,我們可以使用以下的方法寫出逆CDF 

在Python中使用逆變換方法生成隨機變量 

在Python中,我們可以通過如下編寫這些代碼行來簡單地實現(xiàn)它。 

  1. ### Generate exponential distributed random variables given the mean  
  2. ### and number of random variables  
  3. def exponential_inverse_trans(n=1,mean=1):  
  4. U=uniform.rvs(size=n)  
  5. X=-mean*np.log(1-U)  
  6. actual=expon.rvs(size=n,scale=mean)  
  7.  
  8. plt.figure(figsize=(12,9))  
  9. plt.hist(X, bins=50, alpha=0.5, label="Generated r.v.")  
  10. plt.hist(actual, bins=50, alpha=0.5, label="Actual r.v.")  
  11. plt.title("Generated vs Actual %i Exponential Random Variables" %n)  
  12. plt.legend()  
  13. plt.show()  
  14. return X 

 我們可以通過運行以下示例來嘗試上面的代碼。 請注意,由于我們要生成隨機變量,因此結(jié)果可能會有所不同。 

  1. cont_example1=exponential_inverse_trans(n=100,mean=4)  
  2. cont_example2=exponential_inverse_trans(n=500,mean=4)  
  3. cont_example3=exponential_inverse_trans(n=1000,mean=4) 

  在Python中使用逆變換方法生成隨機變量  

在Python中使用逆變換方法生成隨機變量

 

在Python中使用逆變換方法生成隨機變量 

看起來很有趣。 如果將其與實際變量進行比較,我們可以看到生成的隨機變量具有非常相似的結(jié)果。 可以調(diào)整均值(請注意,我為expon.rvs()函數(shù)定義的均值是指數(shù)分布中的比例參數(shù))和/或 生成的隨機變量的數(shù)量,以查看不同的結(jié)果。

離散隨機數(shù)實現(xiàn)代碼

對于離散隨機變量情況,假設(shè)我們要模擬遵循以下分布的離散隨機變量情況X 

在Python中使用逆變換方法生成隨機變量 

首先,我們編寫函數(shù)以使用這些代碼行為一個樣本生成離散隨機變量。 

  1. ### Generate arbitary discrete distributed random variables given  
  2. ### the probability vector  
  3. def discrete_inverse_trans(prob_vec):  
  4. U=uniform.rvs(size=1)  
  5. if U<=prob_vec[0]:  
  6. return 1  
  7. else:  
  8. for i in range(1,len(prob_vec)+1):  
  9. if sum(prob_vec[0:i])<U and sum(prob_vec[0:i+1])>U:  
  10. return i+1 

 然后,我們創(chuàng)建一個函數(shù)以使用這些代碼行生成許多隨機變量樣本。 

  1. def discrete_samples(prob_vec,n=1):  
  2. sample=[]  
  3. for i in range(0,n):  
  4. sample.append(discrete_inverse_trans(prob_vec))  
  5. return np.array(sample) 

 最后,我們創(chuàng)建一個函數(shù)來模擬結(jié)果,并通過這些代碼行將其與實際結(jié)果進行比較。 

  1. def discrete_simulate(prob_vec,numbers,n=1):  
  2. sample_disc=discrete_samples(prob_vec,n)  
  3. unique, counts=np.unique(sample_disc,return_counts=True)  
  4.  
  5. fig=plt.figure()  
  6. ax=fig.add_axes([0,0,1,1])  
  7. prob=counts/n  
  8. ax.bar(numbers,prob)  
  9. ax.set_title("Simulation of Generating %i Discrete Random Variables" %n)  
  10. plt.show()  
  11.  
  12. data={'X':unique,'Number of samples':counts,'Empirical Probability':prob,'Actual Probability':prob_vec}  
  13. df=pd.DataFrame(data=data)  
  14. return df 

 我們可以在下面運行一些示例以查看結(jié)果。 同樣,請注意,由于我們要生成隨機變量,因此結(jié)果可能會有所不同。 

  1. prob_vec=np.array([0.1,0.3,0.5,0.05,0.05])  
  2. numbers=np.array([1,2,3,4,5])  
  3.  
  4. dis_example1=discrete_simulate(prob_vec, numbers, n=100)  
  5. dis_example2=discrete_simulate(prob_vec, numbers, n=500)  
  6. dis_example3=discrete_simulate(prob_vec, numbers, n=1000) 

 在Python中使用逆變換方法生成隨機變量 

在Python中使用逆變換方法生成隨機變量 
在Python中使用逆變換方法生成隨機變量 
  1. In[11]: dis_example1  
  2. Out[11]:  
  3. X Number of samples Empirical Probability Actual Probability  
  4. 0 1 8 0.08 0.10  
  5. 1 2 35 0.35 0.30  
  6. 2 3 50 0.50 0.50  
  7. 3 4 5 0.05 0.05  
  8. 4 5 2 0.02 0.05In[12]: dis_example2  
  9. Out[12]:  
  10. X Number of samples Empirical Probability Actual Probability  
  11. 0 1 53 0.106 0.10  
  12. 1 2 159 0.318 0.30  
  13. 2 3 234 0.468 0.50  
  14. 3 4 30 0.060 0.05  
  15. 4 5 24 0.048 0.05In[13]: dis_example3  
  16. Out[13]:  
  17. X Number of samples Empirical Probability Actual Probability  
  18. 0 1 108 0.108 0.10  
  19. 1 2 290 0.290 0.30  
  20. 2 3 491 0.491 0.50  
  21. 3 4 51 0.051 0.05  
  22. 4 5 60 0.060 0.05 

 結(jié)果很有趣! 我們可以看到,隨著我們增加隨機變量樣本的數(shù)量,經(jīng)驗概率越來越接近實際概率。 嘗試使用不同數(shù)量的樣本和/或不同的分布進行實驗,以查看不同的結(jié)果。

總結(jié) 

這種逆變換方法是統(tǒng)計中非常重要的工具,尤其是在仿真理論中,在給定隨機變量均勻分布在(0,1)中的情況下,我們想生成隨機變量。 研究案例本身非常廣泛,您可以使用在生成經(jīng)驗累積分布函數(shù),預(yù)測分析中使用到的這種方法。

 

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2009-06-24 10:49:08

Unix

2024-09-11 08:00:00

Java優(yōu)于反射開發(fā)

2011-08-31 16:30:19

Lua多線程

2024-10-16 09:43:45

GreatSQLHint數(shù)據(jù)庫

2012-09-24 10:13:35

貝葉斯

2015-04-17 16:44:22

swiftOC

2023-07-12 14:13:03

BashLinux

2022-08-02 11:31:46

Python語法代碼

2023-07-04 15:11:30

TypeScript類型保護

2019-09-16 19:00:48

Linux變量

2013-12-13 17:21:14

Lua腳本語言

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2023-04-12 15:25:09

Bytrace鴻蒙

2018-02-07 08:53:25

Linux命令隨機密碼

2023-05-04 07:33:39

Rust變量常量

2019-07-11 12:59:27

數(shù)據(jù)科學(xué)家概率分布統(tǒng)計

2010-07-27 13:05:12

Flex

2011-08-16 10:35:59

Objective_C私有方法

2020-09-14 14:18:05

Vue和React
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久五月婷 | 国产精品一区二区三区在线 | 九九九久久国产免费 | 国产色片| 蜜桃传媒一区二区 | 精品国产乱码久久久久久88av | 中文字幕欧美一区 | 欧美久久久网站 | 国产成年人视频 | av在线播放网站 | 伊人伊人 | 99免费在线视频 | 国产日韩一区二区三免费高清 | 国产区一区| 久久中文字幕一区 | www精品美女久久久tv | 欧美一区二区三区免费在线观看 | 成人在线免费看 | 亚洲国产精选 | 成人综合在线视频 | 午夜视频在线观看视频 | 精品国产乱码久久久久久中文 | 欧美成人二区 | 红桃成人在线 | 在线免费观看黄视频 | 人人性人人性碰国产 | 色噜噜色综合 | 九九99久久 | 日日夜夜天天 | 国产2区 | 波多野结衣av中文字幕 | 91中文字幕在线观看 | 三级黄色片在线播放 | 一区二区三区不卡视频 | tube国产| 91一区二区三区 | 五月天婷婷综合 | 成人亚洲精品久久久久软件 | 一区二区片| 九色在线 | 欧美8一10sex性hd|