日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python贝叶斯网络预测模型_概率图模型之:贝叶斯网络

發布時間:2023/12/31 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python贝叶斯网络预测模型_概率图模型之:贝叶斯网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、貝葉斯定理

P(A∣B)=P(A)P(B∣A)P(B)

P(A|B)是已知B發生后A的條件概率,也由于得自B的取值而被稱作A的后驗概率。

P(B|A)是已知A發生后B的條件概率,也由于得自A的取值而被稱作B的后驗概率。

P(A)是A的先驗概率或邊緣概率。之所以稱為”先驗”是因為它不考慮任何B方面的因素。

P(B)是B的先驗概率或邊緣概率。

貝葉斯定理可表述為:后驗概率 = (相似度 * 先驗概率) / 標準化常量

也就是說,后驗概率與先驗概率和相似度的乘積成正比。

比例P(B|A)/P(B)也有時被稱作標準相似度,貝葉斯定理可表述為:后驗概率 = 標準相似度 * 先驗概率

假設{Ai}是事件集合里的部分集合,對于任意的Ai,貝葉斯定理可用下式表示:

2、貝葉斯網絡

貝葉斯網絡,由一個有向無環圖(DAG)和條件概率表(CPT)組成。

貝葉斯網絡通過一個有向無環圖來表示一組隨機變量跟它們的條件依賴關系。它通過條件概率分布來參數化。每一個結點都通過P(node|Pa(node))來參數化,Pa(node)表示網絡中的父節點。

如圖是一個簡單的貝葉斯網絡,其對應的全概率公式為:

P(a,b,c)=P(c∣a,b)P(b∣a)P(a)

較復雜的貝葉斯網絡,其對應的全概率公式為:

P(x1,x2,x3,x4,x5,x6,x7)=P(x1)P(x2)P(x3)P(x4∣x1,x2,x3)P(x5∣x1,x3)P(x6∣x4)P(x7∣x4,x5)

3、貝葉斯網絡Student模型

一個學生擁有成績、課程難度、智力、SAT得分、推薦信等變量。通過一張有向無環圖可以把這些變量的關系表示出來,可以想象成績由課程難度和智力決定,SAT成績由智力決定,而推薦信由成績決定。該模型對應的概率圖如下:

4、通過概率圖python類庫pgmpy構建Student模型

代碼如下:

代碼如下:

from pgmpy.models import BayesianModel

from pgmpy.factors.discrete import TabularCPD

# 通過邊來定義貝葉斯模型

model = BayesianModel([('D', 'G'), ('I', 'G'), ('G', 'L'), ('I', 'S')])

# 定義條件概率分布

cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.6, 0.4]])

cpd_i = TabularCPD(variable='I', variable_card=2, values=[[0.7, 0.3]])

# variable:變量

# variable_card:基數

# values:變量值

# evidence:

cpd_g = TabularCPD(variable='G', variable_card=3,

values=[[0.3, 0.05, 0.9, 0.5],

[0.4, 0.25, 0.08, 0.3],

[0.3, 0.7, 0.02, 0.2]],

evidence=['I', 'D'],

evidence_card=[2, 2])

cpd_l = TabularCPD(variable='L', variable_card=2,

values=[[0.1, 0.4, 0.99],

[0.9, 0.6, 0.01]],

evidence=['G'],

evidence_card=[3])

cpd_s = TabularCPD(variable='S', variable_card=2,

values=[[0.95, 0.2],

[0.05, 0.8]],

evidence=['I'],

evidence_card=[2])

# 將有向無環圖與條件概率分布表關聯

model.add_cpds(cpd_d, cpd_i, cpd_g, cpd_l, cpd_s)

# 驗證模型:檢查網絡結構和CPD,并驗證CPD是否正確定義和總和為1

model.check_model()

獲取上述代碼構建的概率圖模型:

In[1]:model.get_cpds()

Out[1]:

[,

,

,

,

]

獲取結點G的概率表:

獲取結點G的概率表:

In[2]:print(model.get_cpds('G'))

╒═════╤═════╤══════╤══════╤═════╕

│ I │ I_0 │ I_0 │ I_1 │ I_1 │

├─────┼─────┼──────┼──────┼─────┤

│ D │ D_0 │ D_1 │ D_0 │ D_1 │

├─────┼─────┼──────┼──────┼─────┤

│ G_0 │ 0.3 │ 0.05 │ 0.9 │ 0.5 │

├─────┼─────┼──────┼──────┼─────┤

│ G_1 │ 0.4 │ 0.25 │ 0.08 │ 0.3 │

├─────┼─────┼──────┼──────┼─────┤

│ G_2 │ 0.3 │ 0.7 │ 0.02 │ 0.2 │

╘═════╧═════╧══════╧══════╧═════╛

獲取結點G的基數:

In[3]: model.get_cardinality('G')

Out[3]: 3

新數據節點值的預測跟計算條件概率非常相似,我們需要查詢預測變量的其他全部特征。困難在于通過分布概率去代替更多可能的變量狀態。

In[7]: infer.map_query('G')

Out[7]: {'G':

總結

以上是生活随笔為你收集整理的python贝叶斯网络预测模型_概率图模型之:贝叶斯网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。