越學越懵了,計算機中是怎麼進行取樣的,用了這麼久的 rand() 函式,到現在才知道是怎麼做的。
計算機中通過線性同餘發生器(linear congruential generator,lcg)很容易從乙個 $ x \sim uniform[0, 1)$ 的均勻分布中進行取樣。如果要從 \(y \sim uniform[a, b)\) 的均勻分布中取樣,只需要 \(x\) 的基礎上做個變換 \(y = (b-a)x + a\) 即可。
當然除了 lcg 外,還有其它均勻分布隨機數生成方法,這裡不一一枚舉,可以參考部落格隨機數生成(一):均勻分布。
單獨把均勻分布取樣摘出來是因為它很基礎,很多其它取樣方法都是在該基礎上進行操作。
我們現在通過某種方法(比如 lcg)可以生成均勻分布的隨機數,這個時候我們就完全可以對某個含有有限個離散取值的變數 \(r\) 進行取樣,方法就是採用輪盤賭選擇法。
假設離散型變數 \(r\) 有 3 個取值,\(a_1, a_2, a_3\),概率分布如下圖所示:
圖 1 離散型變數 $r$ 概率分布
所有取值概率之和為 1。此時我們可以從 \(uniform[0, 1)\) 生成乙個隨機數 \(b\),若 \(0 \le b < 0.6\),則選擇出 \(a_1\);若 \(0.6 \le b < 0.7\),則選擇出 \(a_2\);若 \(0.7 \le b < 1\),則選擇出 \(a_3\)。
上面我們已經討論了從均勻分布 \(u[a,b)\) 中取樣,對於其餘分布,如高斯分布、gamma 分布、指數分布、t 分布、f 分布、beta 分布、dirichlet 分布等等,都可以基於 \(u[0,1)\) 的樣本生成。例如高斯分布可以通過 box-muller 變換得到:
【box-muller 變換】如果隨機變數 \(u_1,u_2\) 獨立且 \(u_1,u_2 \sim uniform[0, 1]\),
\[\begin
z_0 = \sqrt \cos (2 \pi u_2) \\
z_1 = \sqrt \sin (2 \pi u_2)
\end
\]則 \(z_0, z_1\) 獨立且服從標準正態分佈。
想要得到服從 \(z_2 \sim n(\mu, \sigma^2)\) 的高斯分布,則只需對 \(z_0 \sim n(0, 1)\) 做如下變換:
\[z_2 = \sigma z_0 + \mu
\]對於更加一般分布 \(p(x)\),如下圖所示,我們該如何對其進行取樣呢?
圖 2 分布 $p(x)$
這個時候我們可以使用 rejection sampling。
rejection sampling 首先尋找乙個簡單的分布 \(q(x)\),然後乘以乙個常數 \(m\),使其滿足 \(p(x) \le m \cdot q(x)\),如下圖所示,\(q(x)\) 是乙個高斯分布,\(m = 2\)。
圖 2 分布 $p(x)$ 和 分布 2q(x)
在找到乙個分布 \(2q(x)\) 能完全「覆蓋」分布 \(p(x)\) 後,我們任意 sample 乙個樣本點 \(x_i\),但此時,我們將以 \(\frac\) 的概率選擇去接收這個樣本,以 \((1 - \frac)\) 的概率選擇去拒絕該樣本。rejection sampling 平均會接收 \(\frac\) 個樣本點。
rejection sampling 優點:使用 rejection sampling 可以對大多數分布進行取樣,即使這些「分布」沒有進行歸一化。
rejection sampling 缺點:當 \(p(x)\) 和 \(2q(x)\) 相差太多時,rejection sampling 將拒絕大多數樣本點;其次,對於高維資料,常數 \(m\) 會很大,簡單使用 rejection sampling 所需要的樣本量隨空間維數增加而指數增長,即高維情況下不適合用 rejection sampling,此時 mcmc(markov chains monte carlo)和 gibbs sampling 才是主流。(當然 mcmc 等既能處理離散情況也能處理連續情況。)
隨機數生成(一):均勻分布 -- moussatintin
lda-math-mcmc 和 gibbs sampling -- 靳志輝
mcmc(一)蒙特卡羅方法 -- 劉建平pinard
bayesian methods for machine learning: sampling from 1-d distributions
離散取樣Sampling
給定乙個離散型隨機變數的概率分布規律p x i pi,i 1,np x i p i,i in p x i pi i 1 n,希望設計乙個方法能夠從該概率分布中進行取樣使得取樣結果盡可能服從概率分布p 上面在通過累加的方式構造出累積事件概率陣列後,我們可以發現該陣列滿足非遞減有序,對於有序陣列的查詢很...
降取樣,過取樣,欠取樣,子取樣,下取樣,上取樣
取樣 2048hz對訊號來說是過取樣了,事實上只要訊號不混疊就好 滿足尼奎斯特取樣定理 所以可 以對過取樣的訊號作抽取,即是所謂的 降取樣 在現場中取樣往往受具體條件的限止,或者不存在300hz的取樣率,或除錯非常困難等等。若 r 1,則rfs 2就遠大於音訊訊號的最高頻率fm,這使得量化雜訊大部分...
降取樣,過取樣,欠取樣,子取樣,下取樣,上取樣
取樣 2048hz對訊號來說是過取樣了,事實上只要訊號不混疊就好 滿足尼奎斯特取樣定理 所以可 以對過取樣的訊號作抽取,即是所謂的 降取樣 在現場中取樣往往受具體條件的限止,或者不存在300hz的取樣率,或除錯非常困難等等。若 r 1,則rfs 2就遠大於音訊訊號的最高頻率fm,這使得量化雜訊大部分...