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