令人驚艷的算法——蒙特卡洛采樣法


原文發在我的知乎

蒙特卡洛算法

使用概率來求π(圓周率)和定積分,在不使用任何公式和特殊計算方法的前提下,實現小數點后多位的准確率,真的驚艷到我了。

我第一次接觸蒙特卡洛算法,是在做數據采樣的時候,這個名字是20世紀40年代美國在第二次世界大戰中研制原子彈的“曼哈頓計划”計划的成員烏拉姆和馮·諾伊曼首先提出。馮·諾伊曼用馳名世界的賭城—摩納哥的Monte Carlo來命名。

但其實早在1777年,法國數學家布豐提出用投針實驗的方法求圓周率,就已經用到了蒙特卡羅法,只是那個時候並沒有特別命名。

什么是蒙特卡洛法?

假如籃子里有1000個蘋果,讓你每次閉着眼睛找一個最大的,可以不限制挑選次數。於是,你可以閉着眼隨機拿了一個,然后再隨機拿一個與第一個比,留下大的,再隨機拿一個,與前次留下的比較,又可以留下大的。循環往復這樣,拿的次數越多,挑出最大蘋果的可能性也就越大,但除非你把1000個蘋果都挑一遍,否則你無法肯定最終挑出來的就是最大的一個。

也就是說,蒙特卡洛算法是樣本越多,越能找到最佳的解決辦法,不過不保證是最好的,因為如果有10000個蘋果的話,說不定就能找到更大的。

也就是,通過大量隨機樣本,不使用任何公式和計算方法,得到所要計算的值。接下來,我們用4個例子一起來看看蒙特卡洛法的應用吧。

 

例子1:求10000個整數的中位數

先從中抽取m個數,m<10000,把它們的中位數近似地看作這個集合的中位數。隨着m增大,近似結果是最終結果的概率也在增大。


例子2:求圓周率

給定一個邊長為1的正方形,其內部有一個相切的圓

根據高中知識,可以簡單算出它們的面積之比是π/4。

當我們在(0,1)的范圍內隨機選擇一個坐標(x, y)時,每個坐標點被選中的概率相等。則坐標落在直徑為1的正方形中的圓的概率為:

由切比雪夫不等式可知,在生成大量隨機點的前提下我們能得到盡可能接近圓周率的值。

現在,在這個正方形內部,隨機產生10000個點(即10000個坐標對 (x, y)),計算它們與中心點的距離,從而判斷是否落在圓的內部。

如果這些點服從均勻分布,那么圓內的點應該占到所有點的 π/4,因此將這個比值乘以4,就是π的值。通過R語言隨機模擬30000個點,π的估算值與真實值相差0.07%。


例子3:設0≤f(x)≤1,求定積分

設隨機變量XX服從[0,1]上的均勻分布,則Y=f(X)的數學期望為

以估計J的值就是估計f(X)的數學期望值。由辛欽大數定律,可以用f(X)的觀察值的均值取估計f(X)的數學期望。具體做法:

先用計算機產生n個服從[0,1]上均勻分布的隨機數:

對每一個xi,計算f(xi)。然后計算

其精確值和用蒙特卡洛法得到的模擬值如下:


例子4:求自然底數e

首先考慮如下積分

接下來分別用蒙特卡洛積分牛頓萊布尼茲公式計算,在蒙特卡洛方法中樣本很多時,它們的值應該相等。利用蒙特卡洛方法,圖像大致如下

上述積分的目的是求陰影部分的面積,所以先在所標矩形內取n對隨機點

對於每一對

考察是否滿足如下條件

假設滿足上述條件的點有 m個,而全部的點有 n 個,所以得到近似公式為

而依據牛頓萊布尼茲公式可以得到

這兩種方法結果應該是相等的,即有

 

參考文章

蒙特卡洛算法及其實現www.cnblogs.com蒙特卡洛方法與定積分計算 | 統計之都cosx.org圖標用蒙特卡羅方法求解圓周率_一笑而過_新浪博客blog.sina.com.cnCSDN-專業IT技術社區-登錄blog.csdn.net

 

更多機器學習、編程、AI相關知識,歡迎關注我的公眾號“圖靈的貓”。后台回復“學習資料”,即可獲得海量機器學習、深度學習書籍等免費PDF資源

 

 

 原文轉載自我的知乎
蒙特卡洛算法使用概率來求π(圓周率)和定積分,在不使用任何公式和特殊計算方法的前提下,實現小數點后多位的准確率,真的驚艷到我了。我第一次接觸蒙特卡洛算法,是在做數據采樣的時候,這個名字是20世紀40年代美國在第二次世界大戰中研制原子彈的“曼哈頓計划”計划的成員烏拉姆和馮·諾伊曼首先提出。馮·諾伊曼用馳名世界的賭城—摩納哥的Monte Carlo來命名。但其實早在1777年,法國數學家布豐提出用投針實驗的方法求圓周率,就已經用到了蒙特卡羅法,只是那個時候並沒有特別命名。


什么是蒙特卡洛法?

假如籃子里有1000個蘋果,讓你每次閉着眼睛找一個最大的,可以不限制挑選次數。於是,你可以閉着眼隨機拿了一個,然后再隨機拿一個與第一個比,留下大的,再隨機拿一個,與前次留下的比較,又可以留下大的。循環往復這樣,拿的次數越多,挑出最大蘋果的可能性也就越大,但除非你把1000個蘋果都挑一遍,否則你無法肯定最終挑出來的就是最大的一個。也就是說,蒙特卡洛算法是樣本越多,越能找到最佳的解決辦法,不過不保證是最好的,因為如果有10000個蘋果的話,說不定就能找到更大的。也就是,通過大量隨機樣本,不使用任何公式和計算方法,得到所要計算的值。接下來,我們用4個例子一起來看看蒙特卡洛法的應用吧。
例子1:求10000個整數的中位數先從中抽取m個數,m<10000,把它們的中位數近似地看作這個集合的中位數。隨着m增大,近似結果是最終結果的概率也在增大。


例子2:求圓周率給定一個邊長為1的正方形,其內部有一個相切的圓根據高中知識,可以簡單算出它們的面積之比是π/4。當我們在(0,1)的范圍內隨機選擇一個坐標(x, y)時,每個坐標點被選中的概率相等。則坐標落在直徑為1的正方形中的圓的概率為:由切比雪夫不等式可知,在生成大量隨機點的前提下我們能得到盡可能接近圓周率的值。現在,在這個正方形內部,隨機產生10000個點(即10000個坐標對 (x, y)),計算它們與中心點的距離,從而判斷是否落在圓的內部。如果這些點服從均勻分布,那么圓內的點應該占到所有點的 π/4,因此將這個比值乘以4,就是π的值。通過R語言隨機模擬30000個點,π的估算值與真實值相差0.07%。


例子3:設0≤f(x)≤1,求定積分設隨機變量XX服從[0,1]上的均勻分布,則Y=f(X)的數學期望為以估計J的值就是估計f(X)的數學期望值。由辛欽大數定律,可以用f(X)的觀察值的均值取估計f(X)的數學期望。具體做法:先用計算機產生n個服從[0,1]上均勻分布的隨機數:對每一個xi,計算f(xi)。然后計算其精確值和用蒙特卡洛法得到的模擬值如下:


例子4:求自然底數e首先考慮如下積分接下來分別用蒙特卡洛積分牛頓萊布尼茲公式計算,在蒙特卡洛方法中樣本很多時,它們的值應該相等。利用蒙特卡洛方法,圖像大致如下上述積分的目的是求陰影部分的面積,所以先在所標矩形內取n對隨機點對於每一對考察是否滿足如下條件假設滿足上述條件的點有 m個,而全部的點有 n 個,所以得到近似公式為而依據牛頓萊布尼茲公式可以得到這兩種方法結果應該是相等的,即有

 

更多機器學習、編程、AI相關知識,歡迎關注我的公眾號“圖靈的貓”。后台回復“學習資料”,即可獲得海量機器學習、深度學習書籍等免費PDF資源~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM