資料分析經典模型之貝葉斯統計模型

數據分析那些事
數據分析那些事
7 min readAug 11, 2021

即使對於一個非資料科學家來說,貝葉斯統計這個術語也已經很流行了。你可能在大學期間把它作為必修課之一來學習,而沒有意識到貝葉斯統計有多麼重要。事實上,貝葉斯統計不僅僅是一種特定的方法,甚至是一類方法;它是一種完全不同的統計分析正規化。

﹣為什麼貝葉斯統計如此重要?

貝葉斯統計為你提供了在新資料的證據中更新你的評估工具,這是一個在許多現實世界場景中常見的概念,如跟蹤大流行病,預測經濟趨勢,或預測氣候變化。貝葉斯統計是許多較著名的統計模型的支柱,如高斯過程。

重要的是,學習貝葉斯統計原理可以成為你作為一個數據科學家的寶貴財富,因為它給你一個全新的視角來解決具有真實世界動態資料來源的新問題。

這篇文章將介紹貝葉斯統計的基本理論,以及如何在Python中實現一個簡單的貝葉斯模型。

目錄表:
01 什麼是貝葉斯統計?

02 貝葉斯程式設計簡介

03 貝葉斯的工作流程

04 建立一個簡單的貝葉斯模型

閒話少說,進入主題!讓我們開始介紹貝葉斯統計程式設計。

01 什麼是貝葉斯統計?

你可能會在網際網路上的某個地方或在你的課堂上看到這個方程式。

如果你沒有,也不要擔心,因為我將向你簡要介紹貝葉斯的基本原則以及該公式的工作原理。

關鍵術語
上述貝葉斯公式的組成部分一般被稱為機率宣告。例如,在下面的後驗機率宣告中,該術語的意思是 “給定觀測值y,theta(θ)的機率是多少 “。

Theta(θ)是這裡的未知數,被稱為我們所關心的引數。引數的不確定性遵循一個特定的機率分佈,可以使用與資料相關的模型組合來估計有關引數。

上述貝葉斯統計表述也被稱為反機率,因為它是從觀察到引數開始的。換言之,貝葉斯統計試圖從資料(效果)中推斷出假設(原因),而不是用資料來接受/拒絕工作假設。

貝葉斯公式
那麼,貝葉斯公式告訴我們什麼呢?

後驗機率是我們想知道的主要部分,因為Theta(θ)是我們感興趣的引數。

觀察的可能性僅僅意味著,在Theta(θ)的特定值下,資料y在現實世界中出現的可能性有多大。

先驗機率是我們對Theta (θ)應該是什麼樣子的最佳猜測(例如,也許它遵循正態或高斯分佈)。

歸一化常數只是一個係數常數,使整個方程積分為1(因為機率不能低於0和高於1)。

現在我們已經涵蓋了貝葉斯統計的基本理論,讓我們開始為即將到來的貝葉斯程式設計教程進行設定。

02 貝葉斯程式設計介紹

安裝
首先,安裝PyMC3作為我們執行貝葉斯統計程式設計的首選庫。

推薦使用conda
conda install -c conda-forge pymc3

也可使用pip
pip install pymc3

獲取資料
我們將使用描述美國家庭中氡氣(Radon)濃度的氡氣資料集。氡氣已被證明是非吸菸者患肺癌的最高預測因素之一,其濃度通常與房屋的整體條件(例如,是否有地下室,等等)有關。

首先,在你的筆記本或終端執行以下命令:

!wget“https://raw.githubusercontent.com/fonnesbeck/mcmc_pydata_london_2019/master/data/radon.csv"

確保你的資料位於你的筆記本的同一目錄內。

資料探索

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as npradon = pd.read_csv(‘./radon.csv’, index_col=0)radon.head()

我們注意到,有29列描述了一個家庭中氡(Radon)的濃度。

讓我們畫一張圖,顯示 “ANOKA “的氡的對數濃度分佈,用一條垂直線來說明對數濃度為1.1。

anoka_radon = radon.query(‘county==”ANOKA”’).log_radon
sns.distplot(anoka_radon, bins=16)plt.axvline(1.1)

ANOKA地區氡氣對數濃度超過1.1的家庭比例似乎相當大,這是一個令人擔憂的趨勢……

03 貝葉斯工作流程

現在我們有了資料,讓我們進行貝葉斯推斷。一般來說,這個過程可以分解為以下三個步驟。

第1步:指定一個機率模型
這是作為建模者要多做選擇的地方。你將需要為一切指定最可能的機率分佈函式(例如,正態或高斯、考奇、二項式、t分佈、F分佈,等等)。

我所說的一切,是指包括未知引數、資料、協變數、缺失資料、預測在內的一切。所以,用不同的分佈函式做實驗,看看在現實世界的場景中如何起效。

第2步:計算後驗分佈

現在你將計算這個機率項,給定貝葉斯方程右邊的所有項。

第3步:檢查你的模型
與其他ML模型一樣,評估你的模型是關鍵。回到第一步,檢查你的假設是否有意義。如果沒有,改變機率分佈函式,並反覆重申。

04 建立一個簡單的貝葉斯模型

現在,我將向你介紹一個簡單的程式設計練習來建立你的第一個貝葉斯模型。

第1步:定義一個貝葉斯模型
首先,讓我們定義我們的氡氣 — — 貝葉斯模型,有兩個引數,平均值(μ-”miu”)和其偏差(σ-”sigma”)。這些引數(μ和σ)還需要透過選擇對應的分佈函式來建立模型(記住:我們必須為所有引數定義機率分佈)。

對於這些,我們選擇的函式是正態/高斯分佈(μ=0,σ=10)和均勻分佈。你可以在模型的驗證檢查中重新校準這些值,如上面步驟3所述。

from pymc3 import Model, Normal, Uniformwith Model() as radon_model:
μ = Normal(’μ’, mu=0, sd=10)
σ = Uniform(’σ’, 0, 10)

下一步是用另一個機率分佈來編譯radon_model本身。

*with** radon_model:
dist = Normal(‘dist’, mu=μ, sd=σ, observed=anoka_radon)

第2步:用資料進行模型擬合
現在,我們需要用資料來擬合這個模型(即訓練)。

from pymc3 import sample

**with** radon_model:
samples = sample(1000, tune=1000, cores=2, random_seed=12)

讓我們畫出我們的引數μ在訓練後的分佈情況,同時畫出95%的置信線。

from arviz import plot_posterior

plot_posterior(samples, var_names=[‘μ’], ref_val=1.1)

好吧,看來1.1的對數濃度可能不是那麼糟糕,因為它是在分佈的尾端(只有2.2%的樣品的對數濃度大於1.1)。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

國內外經典開源資料大全!

未來10年,最具顛覆性的5大指數型技術(附應用建議)

12個資料分析裡最常用的思維定式,收藏起來吃灰

--

--

數據分析那些事
數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/