线性同余法求随机数python实现_百面机器学习笔记 | 第八章:采样 | 02 均匀分布随机数...
均勻分布是指整個(gè)樣本空間中的每一個(gè)樣本點(diǎn)對(duì)應(yīng)的概率(密度)都是相等的。根據(jù)樣本空間是否連續(xù),又分為離散均勻分布和連續(xù)均勻分布。均勻分布可以算作是最簡(jiǎn)單的概率分布。從均勻分布中進(jìn)行采樣,即生成均勻分布隨機(jī)數(shù), 幾乎是所有采樣算法都需要用到的基本操作。然而,即使是如此簡(jiǎn)單的分布,其采樣過(guò)程也并不是顯然的,需要精心設(shè)計(jì)一定的策略。
如何編程實(shí)現(xiàn)均勻分布隨機(jī)數(shù)生成器?
首先需要明確的是,計(jì)算機(jī)程序都是確定性的,因此并不能產(chǎn)生真正意義上 的完全均勻分布隨機(jī)數(shù),只能產(chǎn)生偽隨機(jī)數(shù)(偽隨機(jī)數(shù)是指這些數(shù)字雖然是通過(guò) 確定性的程序產(chǎn)生的,但是它們能通過(guò)近似的隨機(jī)性測(cè)試)。另外,由于計(jì)算機(jī)的存儲(chǔ)和計(jì)算單元只能處理離散狀態(tài)值,因此也不能產(chǎn)生連續(xù)均勻分布隨機(jī)數(shù), 只能通過(guò)離散分布來(lái)逼近連續(xù)分布(用很大的離散空間來(lái)提供足夠的精度)。
一般可采用線性同余法(Linear Congruential Generator)來(lái)生成離散均勻分布偽隨機(jī)數(shù),計(jì)算公式為:
也就是根據(jù)當(dāng)前生成的隨機(jī)數(shù)
來(lái)進(jìn)行適當(dāng)變換,進(jìn)而產(chǎn)生下一次的隨機(jī)數(shù) 。 初始值 稱(chēng)為隨機(jī)種子。上式得到的是區(qū)間[0,m?1]上的隨機(jī)整數(shù),如果想要 得到區(qū)間[0,1]上的連續(xù)均勻分布隨機(jī)數(shù),用 除以m即可。可以看出,線性同余法得到的隨機(jī)數(shù)并不是相互獨(dú)立的(下一次的隨機(jī)數(shù)根 據(jù)當(dāng)前隨機(jī)數(shù)來(lái)產(chǎn)生)。此外,根據(jù)線性同余法的計(jì)算公式,該算法最多只能產(chǎn)生m個(gè)不同的 隨機(jī)數(shù),實(shí)際上對(duì)于特定的種子,很多數(shù)無(wú)法取到,循環(huán)周期基本達(dá)不到m。如果 進(jìn)行多次操作,得到的隨機(jī)數(shù)序列會(huì)進(jìn)入循環(huán)周期。因此,一個(gè)好的線性同余隨 機(jī)數(shù)生成器,要讓其循環(huán)周期盡可能接近m,這就需要精心選擇合適的乘法因子a 和模數(shù)m(需要利用代數(shù)和群理論)。具體實(shí)現(xiàn)中有多種不同的版本,例如gcc中采用 的glibc版本:
但不管怎樣,由計(jì)算機(jī)程序?qū)崿F(xiàn)的隨機(jī)數(shù)生成器產(chǎn)生的都是偽隨機(jī)數(shù),真正 的隨機(jī)數(shù)只會(huì)存在于自然界的物理現(xiàn)象中,比如放射性物質(zhì)的衰變,溫度、氣流 的隨機(jī)擾動(dòng)等。有一些網(wǎng)站可以提供基于大自然的隨機(jī)現(xiàn)象的隨機(jī)生成器,有興 趣的讀者可以嘗試一下。下圖是通過(guò)大氣噪聲來(lái)產(chǎn)生隨機(jī)數(shù),可以說(shuō)是“貨真價(jià) 實(shí)”的真隨機(jī)數(shù)生成器了。
閃電產(chǎn)生大氣噪聲面試時(shí),面試官還可能會(huì)針對(duì)線性同余法進(jìn)行深入提問(wèn),比如,線性同余法 中的隨機(jī)種子一般如何選定?如果需要產(chǎn)生高維樣本或大量樣本,線性同余法會(huì) 存在什么問(wèn)題?如何證明上述線性同余發(fā)生器得到的序列可以近似為均勻分布 (偽隨機(jī)數(shù))?
總結(jié)
以上是生活随笔為你收集整理的线性同余法求随机数python实现_百面机器学习笔记 | 第八章:采样 | 02 均匀分布随机数...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转载][路由器] k2p支持ipv6相
- 下一篇: 使用C++编写一个DHT爬虫,实现从DH