【機器學習基礎】數學推導+純Python實現機器學習算法21:馬爾可夫鏈蒙特卡洛

2021-03-02 機器學習初學者

Python機器學習算法實現

Author:louwill

Machine Learning Lab

     

     蒙特卡洛(Monte Carlo,MC)方法作為一種統計模擬和近似計算方法,是一種通過對概率模型隨機抽樣進行近似數值計算的方法。馬爾可夫鏈(Markov Chain,MC)則是一種具備馬爾可夫性的隨機序列。將二者結合起來便有了馬爾可夫鏈蒙特卡洛方法(Markov Chain Monte Carlo,MCMC),即是以構造馬爾可夫鏈為概率模型的蒙特卡洛方法。     限於篇幅,本文不對MCMC的前置知識進行詳細介紹,關於蒙特卡洛方法和馬爾可夫鏈的大量內容,請各位讀者自行查閱相關材料進行學習。本文聚焦於MCMC方法本身原理和常用實現方法。MCMC簡介     一般來說,對目標概率模型進行隨機抽樣能夠幫助我們得到該分布的近似數值解。但如果隨機變量的多元的,或者所要抽樣的概率密度函數形式是複雜的非標準式時,直接應用蒙特卡洛方法就會很困難。     MCMC方法的基本思路是:在隨機變量
from scipy.stats import normimport randomimport matplotlib.pyplot as plt
def smooth_dist(theta): y = norm.pdf(theta, loc=3, scale=2) return y
T = 10000pi = [0 for i in range(T)]sigma = 1t = 0while t < T-1: t = t + 1 pi_star = norm.rvs(loc=pi[t - 1], scale=sigma, size=1, random_state=None) alpha = min(1, (smooth_dist(pi_star[0]) / smooth_dist(pi[t - 1]))) u = random.uniform(0, 1) if u < alpha: pi[t] = pi_star[0] else: pi[t] = pi[t - 1]
plt.scatter(pi, norm.pdf(pi, loc=3, scale=2), label='Target Distribution')num_bins = 100plt.hist(pi, num_bins, normed=1, facecolor='red', alpha=0.6, label='Samples Distribution')plt.legend()plt.show();

     相較於M-H抽樣,Gibbs抽樣是目前更常用的MCMC抽樣算法,Gibbs抽樣可以視為特殊的M-H抽樣方法。Gibbs抽樣適用於多元隨機變量聯合分布的抽樣和估計,其基本思路是從聯合概率分布種定義滿條件概率分布,依次對滿條件概率分布進行抽樣得到目標樣本序列。     這裡簡單提一下滿條件分布。假設MCMC的目標分布為多元聯合概率分布
import mathfrom scipy.stats import multivariate_normalsamplesource = multivariate_normal(mean=[5,-1], cov=[[1,0.5],[0.5,2]])
def p_yx(x, m1, m2, s1, s2): return (random.normalvariate(m2 + rho * s2 / s1 * (x - m1), math.sqrt(1 - rho ** 2) * s2))def p_xy(y, m1, m2, s1, s2): return (random.normalvariate(m1 + rho * s1 / s2 * (y - m2), math.sqrt(1 - rho ** 2) * s1))
N, K= 5000, 20x_res = []y_res = []z_res = []m1, m2 = 5, -1s1, s2 = 1, 2rho, y = 0.5, m2
for i in range(N): for j in range(K): x = p_xy(y, m1, m2, s1, s2) y = p_yx(x, m1, m2, s1, s2) z = samplesource.pdf([x,y]) x_res.append(x) y_res.append(y) z_res.append(z)num_bins = 50plt.hist(x_res, num_bins, normed=1, facecolor='green', alpha=0.5,label='x')plt.hist(y_res, num_bins, normed=1, facecolor='red', alpha=0.5,label='y')plt.title('Histogram')plt.legend()plt.show();

二維效果展示:

from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)ax.scatter(x_res, y_res, z_res, marker='o')plt.show();

MCMC與貝葉斯推斷     MCMC對高效貝葉斯推斷有著重要的作用。假設有如下貝葉斯後驗分布推導:     在概率分布多元且形式複雜的情形下,經過貝葉斯先驗和似然推導後(即右邊的分式),很難進行積分運算。具體包括以下三種積分運算:規範化、邊緣化和數學期望。      當觀測數據、先驗分布和似然函數都比較複雜的時候,以上三個積分計算都會變得極為困難,這也是早期貝葉斯推斷受到冷落的一個原因。後來MCMC方法興起,Bayesian+MCMC的一套做法逐漸流行起來。

參考資料:

統計學習方法第二版

https://zhuanlan.zhihu.com/p/37121528

往期精彩:

數學推導+純Python實現機器學習算法20:LDA線性判別分析

數學推導+純Python實現機器學習算法19:PCA降維

數學推導+純Python實現機器學習算法18:奇異值分解SVD

數學推導+純Python實現機器學習算法17:XGBoost

數學推導+純Python實現機器學習算法16:Adaboost

數學推導+純Python實現機器學習算法15:GBDT

數學推導+純Python實現機器學習算法14:Ridge嶺回歸

數學推導+純Python實現機器學習算法13:Lasso回歸

數學推導+純Python實現機器學習算法12:貝葉斯網絡

數學推導+純Python實現機器學習算法11:樸素貝葉斯

數學推導+純Python實現機器學習算法10:線性不可分支持向量機

數學推導+純Python實現機器學習算法8-9:線性可分支持向量機和線性支持向量機

數學推導+純Python實現機器學習算法7:神經網絡

數學推導+純Python實現機器學習算法6:感知機

數學推導+純Python實現機器學習算法5:決策樹之CART算法

數學推導+純Python實現機器學習算法4:決策樹之ID3算法

數學推導+純Python實現機器學習算法3:k近鄰

數學推導+純Python實現機器學習算法2:邏輯回歸

數學推導+純Python實現機器學習算法1:線性回歸

獲取一折本站知識星球優惠券,複製連結直接打開:

https://t.zsxq.com/yFQV7am

本站qq群1003271085。

加入微信群請掃碼進群:

相關焦點

  • 數學推導+純Python實現機器學習算法30:系列總結與感悟
    實現機器學習算法3:k近鄰數學推導+純Python實現機器學習算法4:決策樹之ID3算法數學推導+純Python實現機器學習算法5:決策樹之CART算法數學推導+純Python實現機器學習算法6:感知機數學推導+純Python實現機器學習算法7:神經網絡數學推導+純Python實現機器學習算法
  • 【機器學習基礎】數學推導+純Python實現機器學習算法12:貝葉斯網絡
    基於pgmpy的貝葉斯網絡實現     本節我們基於pgmpy來構造貝葉斯網絡和進行建模訓練。pgmpy是一款基於Python的概率圖模型包,主要包括貝葉斯網絡和馬爾可夫蒙特卡洛等常見概率圖模型的實現以及推斷方法。本節使用pgmpy包來實現簡單的貝葉斯網絡。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法10:線性不可分支持向量機
    一般來說,用線性可分方法來解決非線性可分問題可分為兩步:首先用一個變換將原始空間的數據映射到新空間,再在新空間中用線性分類學習方法訓練分類模型。這種將原始空間轉換到新空間的方法稱為核技巧(kernel trick)。
  • 數學推導+純Python實現機器學習算法12:貝葉斯網絡
    https://github.com/luwill/machine-learning-code-writing參考資料:pgmpy: Probabilistic Graphical Models using Python數據挖掘導論往期精彩:數學推導
  • 數學推導+純Python實現機器學習算法20:隨機森林
    Python機器學習算法實現Author:louwillMachine
  • 數學推導+純Python實現機器學習算法17:XGBoost
    Python機器學習算法實現Author:louwillMachine
  • 數學推導+純Python實現機器學習算法28:奇異值分解SVD
    Python機器學習算法實現Author:louwillMachine
  • 【機器學習基礎】數學推導+純Python實現機器學習算法8-9:線性可分支持向量機和線性支持向量機
    為了處理非線性的情況,在感知機模型的基礎上有了兩個方向,一個就是上一講說到的神經網絡,大家也看到了,現在深度學習大放異彩,各種網絡功能強大。但實際上在神經網絡興起之前,基於感知機的另一種模型——支持向量機,同樣可以解決非線性問題。     支持向量機一般來說有三種任務類型:線性可分情況,近似線性可分情況以及線性不可分情況。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法3:k近鄰
    ,k 近鄰在眾多有監督機器學習算法中算是一種比較獨特的方法。說它獨特,是因為 k 近鄰不像其他模型有損失函數、有優化算法、有訓練過程。對於給定的實例數據和實例數據對應所屬類別,當要對新的實例進行分類時,根據這個實例最近的 k 個實例所屬的類別來決定其屬於哪一類。所以相對於其它機器學習模型和算法,k 近鄰總體上而言是一種非常簡單的方法。
  • 《機器學習-原理、算法與應用》出版了
    結合SIGAI的「機器學習算法地圖」,「深度學習算法地圖」使用,效果更佳。如果完整的學習本書,可以讓你對機器學習和深度學習有全面而系統的理解。為了讓讀者理解數學公式,本書特意在第2章安排了數學知識的講解。2.深入淺出。寫書的目的是讓讀者能夠看到,且更容易看懂,即將複雜的問題簡單化,而不是相反。
  • 數學推導+純Python實現機器學習算法18:LightGBM
    Python機器學習算法實現Author:louwillMachine
  • 徹底解決數學問題-《機器學習的數學》出版了
    打下堅實的數學基礎,是很多初學者乃至進階者關心的話題。我們把這個問題拆解成下面幾個問題:接下來我們將逐一解答這些問題,給出學好數學的一個合理方案。作者:雷明京東購5折對於機器學習來說,上至理論層面如統計學習理論,下至典型的具體算法,在算法的推導與實現過程中,都大量的以數學作為工具。
  • Python大數據綜合應用 :零基礎入門機器學習、深度學習算法原理與案例
    機器學習、深度學習算法原理與案例實現暨Python大數據綜合應用高級研修班一、課程簡介
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • 數學推導+純Python實現機器學習算法:Lasso回歸
    在正式介紹這兩種模型之前,筆者還是想帶大家複習一下過擬合和正則化等機器學習關鍵問題。正則化與L1範數正則化是防止模型過擬合的核心技術之一,關於欠擬合和過擬合的問題,這裡筆者就不再展開來說,不了解的朋友可以看看筆者很早之前寫的一篇文章:談談過擬合。
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    每個算法模型都介紹其較為通用且實用的建模過程,力爭使基礎較差的讀者也能無障礙利用python來使用機器學習算法。1 初識機器學習1.1 什麼是機器學習?實際上並不需要,Python有scikit-learn模塊等可以直接進行建模的調用包,基本只需要學會python的各種基礎的知識和應用,熟悉scikit-learn的相關模型用法,以及包括numpy、pandas、matplotlib模塊在內的常用的數據處理和可視化包,就可以實現各種機器學習算法了。
  • 《深度學習》聖經花書的數學推導、原理與Python代碼實現
    MingchaoZhu同學基於數學推導和產生原理重新描述了書中的概念,並用Python (numpy 庫為主) 復現了書本內容,在Github上開放,歡迎大家查看學習。最後,深度學習全書還提供了一些研究方向,涵蓋的理論主題包括線性因子模型、自編碼器、表示學習、結構化概率模型、蒙特卡羅方法、配分函數、近似推斷以及深度生成模型,適用於相關專業的大學生或研究生使用。《深度學習》可以說是深度學習與人工智慧的入門寶典,許多算法愛好者、機器學習培訓班、網際網路企業的面試,很多都參考這本書。但本書晦澀,加上官方沒有提供代碼實現,因此某些地方較難理解。
  • B站最強學習資源匯總(Python,數據科學,機器學習)
    https://www.bilibili.com/video/av46180067/課程介紹:這門課程來自鄒博老師的《機器學習與數學分析》,風格同樣是深入淺出、通俗易懂,對於有基礎和沒基礎的同學,都能讓你輕易入門。
  • 無需數學知識:快速了解馬爾可夫鏈蒙特卡洛方法
    而在貝葉斯方法家族當中,馬爾可夫鏈蒙特卡洛方法(Markov chain Monte Carlo methods)顯得尤為神秘。雖然其中確實涉及大量數學知識且需要昂貴的計算資源,但與數據科學領域的眾多其它方法一樣,其中的基本推理過程同樣可以通過非常直觀的方式進行歸納。而這正是本文的核心主旨所在。
  • python機器學習預測分析核心算法.pdf
    AI項目體驗地址 https://loveai.tech《Python機器學習 預測分析核心算法》內容簡介  在學習和研究機器學習的時候,面臨令人眼花繚亂的算法,機器學習新手往往會不知所措。本書從算法和Python語言實現的角度,幫助讀者認識機器學習。