天天看點

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

作者 | Valentina Alto 譯者 | 陸離 出品 | Python大學營(ID:pythonnews)

馬爾可夫鍊(Markov Chain),又稱為離散時間馬爾可夫鍊,可以定義為一個随機過程Y,在某時間t上的任何一個點的值僅僅依賴于在時間t-1上的值。這就表示了我們的随機過程在時間t上具有狀态x的機率,如果給出它之前所有的狀态,那麼就相當于在僅給出它在時間t-1的狀态的時候,在時間t上具有狀态x的機率。

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

如果可能的狀态集S是有限的,那麼,我們可以提供馬爾可夫鍊的可視化表示結果,如下圖所示:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

上圖中的每個圓圈都代表了一個狀态,在這種情況下S={A, B, C},而箭頭則表示過程從一個狀态跳到另一個狀态的機率。我們可以在一個稱為“轉移矩陣”P中收集所有的這些機率資料,如下圖所示:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

那麼,就有:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

然後,在每個時間點上,我們可以描述過程的(無條件的)機率分布,這将是一個向量,其分量數等于S的維數。每個分量表示我們的過程取值等于給定狀态的無條件機率。也就是:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

關于上式中變量μ的比較有趣的性質是,它會通過以下等式的關系與轉移矩陣相關聯:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

是以,一旦我們有了向量的已知初始值(這是可以了解的,因為我們是從一個可觀察的狀态開始的,是以将有一個包含多個0的向量,但在初始狀态的位置上隻有一個0),這樣就可以計算過程在任何時間點上的分布了。

與此同時,我們的向量有一個特定的值,以使下面這個等式成立:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

如果存在如上所述的一個值,我們将相應的變量μ稱為過程的不變分布。

在讨論馬爾可夫鍊蒙特卡羅(MCMC)方法的時候,不變分布是一個關鍵的概念。它包括一類從機率分布中抽樣的算法,這個機率分布構造了一個馬爾可夫鍊,而這個馬爾可夫鍊則希望把這個分布作為它的不變分布。

事實上,蒙特卡羅方法的目标是要從不易抽樣的分布中找到抽樣的方法。要繞過這個問題,我們已有了一些方法,如拒絕抽樣和重要性抽樣等等,它們使用了一個更簡單的函數,稱為“proposal”(你可以點選這裡找到相關的内容https://medium.com/datadriveninvestor/understanding-rejection-sampling-method-43b0006e0d0c)

讓我們模拟一個馬爾可夫鍊,現在,考慮一個變量,今天的狀态可能隻取決于昨天的狀态,這個變量有可能指的是天氣。是以讓我們考慮下面的馬爾可夫鍊:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

我們可以用以前的方法來解釋上圖。也就是說,如果今天是晴天,則明天也是晴天的機率是50%,而下雨的機率是15%,是多雲天氣的機率是35%。

我們可以在以下的轉移矩陣中收集表示上圖中箭頭的數組:

另外,也有一個初始值,比如說“多雲”,是以我們已經有了y的初始分布,即μ _0=[0,0,1]。

由于我們有一個初始的變量μ和一個轉移矩陣,是以就可以在任意時間點t上計算μ的值。是以,有了這些之後,我想根據每個t值的機率分布來建立一個随機過程(具有馬爾可夫鍊的屬性,是以可以隻依賴于前一個時間段)。

這意味着我得到的随機變量Y将會有一些等于瞬間數量的分量,而每個分量都是根據瞬間的機率分布來實作的過程。為此,我們希望從均勻分布中生成一個随機數,并設定如下規則:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

讓我們用Python語言來實作程式代碼。為此,我假設了50天的測試,然後我輸入:

如果我用圖表來繪制随機過程,将會得到以下類似的結果:

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

在這個過程中比較有趣的是,如果計算這些機率分布中清單的平均值(每個t值對應一個),我們将會得到:

這近似于不變分布,它可以進行如下的計算:

是以,我們從一個機率分布中建立了一個随機樣本,而這個機率分布等于馬爾可夫鍊的不變分布。如果我們認為這個分布等于目标分布(要記住,很難從中取樣),那麼就找到了繞過這個問題的辦法。

原文位址

https://medium.com/analytics-vidhya/markov-chain-montecarlo-28dcde238e37

(本文由Python大學營翻譯,轉載請聯系微信:1092722531)

精彩推薦

早鳥票限量5折 ! 2019 中國大資料技術大會(BDTC)再度來襲! 豪華 主席 陣容及 百位技術專家 齊聚, 15 場 精選 專題技術和行業論壇, 超強幹貨+技術剖析+行業實踐立體解讀 ,深入解析熱門技術在行業中的實踐落地。

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

推薦閱讀

  • 每個新手程式員都應該知道的Python開發技巧
  • Python帶你分析,英超是否已經大結局
  • Python GUI開發,效率提升10倍的方法!
  • Python老司機給上路新手的3點忠告
  • Python新工具:用三行代碼提取PDF表格資料
  • 微軟也愛Python!VS Code Python全新釋出!Jupyter Notebook原生支援終于來了!
  • 5大必知的圖算法,附Python代碼實作

  • 吐血整理!140種Python标準庫、第三方庫和外部工具都有了
  • 如何用爬蟲技術幫助孩子秒到心儀的幼稚園(基礎篇)

  • Python傳奇:30年崛起之路

python 可視化_Python可視化解析MCMCPython傳奇:30年崛起之路

你點的每個“在看”,我都認真當成了喜歡

繼續閱讀