使人驚豔的算法——蒙特卡洛採樣法

蒙特卡洛算法
使用機率來求π(圓周率)和定積分,在不使用任何公式和特殊計算方法的前提下,實現小數點後多位的準確率,真的驚豔到我了。
我第一次接觸蒙特卡洛算法,是在作數據採樣的時候,這個名字是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資源~web


往期文章:算法

    推薦資源:編輯器

做者簡介:godweiyang知乎同名華東師範大學計算機系碩士在讀,方向天然語言處理與深度學習喜歡與人分享技術與知識,期待與你的進一步交流~人工智能


個人微信:weiyang792321264。有任何問題均可以在評論區留言,也歡迎加我微信深刻溝通~



本文分享自微信公衆號 - 算法碼上來(GodNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索