在这里我们有一个例题来分别演示讲解
假定某个局部区域细胞识别中正常P(w1)和非正常
P(w2)两类先验概率分别为:
正常状态:P(w1)=0.9;异常状态:P(w2)=0.1。
现有一系列待观察的细胞,其观察值为:-2.67 -3.55 -1.24 -
0.98 -0.79 -2.85 -2.76 -3.73 -3.54 -2.27 -3.45 -3.08 -1.58 -1.49
-0.74 -0.42 -1.12 4.25 -3.99 2.88 -0.98 0.79 1.19 3.07
两类的类条件概率符合正态分布,分别为p(x|w1)=(-2,
1.5),p(x|w2)=(2,2)。风险决策表为:λ12=7, λ21=2,λ11=λ22=0。
首先需要计算出类条件概率
p(x|w1)以及p(x|w2)
由题知呈正太分布,则在Python中调用统计函数库
from scipy.stats import norm
生成正太函数设置均值和标准差
gauss1=norm(loc=-2,scale=1.5)#loc:均值,scale:标准差
gauss2=norm(loc=2,scale=2)#loc:均值,scale:标准差
pxw1=gauss1.pdf(x)#第一类的类条件概率P(x|w1)
pxw2=gauss2.pdf(x)#第二类的类条件概率p(x|w2)
一、最小错误率贝叶斯决策
在这类决策中,最重要的是求出两类后验概率来进行比较,后验概率较大的意味着错误率较小。
后验概率
p(x)是全概率
计算出后验概率平p(w1|x)以及p(w2|x)后进行比较
取后验概率较大的作为决策类
如p(w1|x)>p(w2|x)则x为w1类
二、最小风险贝叶斯决策
这这道例题中的两类条件风险R就为
计算出R(a1|x)以及R(a2|y)比较取风险较小的作为决策类
如R(a1|x)
三、具体代码如下
from scipy.stats import norm #统计函数库
x=[-2.67,-3.55,-1.24,-0.98,-0.79,-2.85,-2.76,-3.73,-3.54,-2.27,-3.45,-3.08,-1.58,-1.49,-0.74,-0.42,-1.12,4.25,-3.99,2.88,-0.98,0.79,1.19,3.07]
pw1=0.9
pw2=0.1
gauss1=norm(loc=-2,scale=1.5)#loc:均值,scale:标准差
gauss2=norm(loc=2,scale=2)#loc:均值,scale:标准差
pxw1=gauss1.pdf(x)#第一类的类条件概率P(x|w1)
pxw2=gauss2.pdf(x)#第二类的类条件概率p(x|w2)
px=(pxw1*pw1+pxw2*pw2)#全概率P(x)
pwx1=pxw1*pw1/px#第一类后验概率P(w1|x)
pwx2=pxw2*pw2/px#第一类后验概率P(w2|x)
print(pwx1)
print(pwx2)
r=[0]*24
for i in range(0,24):
if pwx1[i]>pwx2[i]:
r[i]=1
else:
r[i]=2
i=i+1
print('基于最小错误率的决策结果')
print(r)#最小错误率贝叶斯决策
#最小风险贝叶斯决策
loss12=7
loss21=2
loss11=loss22=0
r1=loss11*pwx1+loss12*pwx2#判断为第一类的条件风险
r2=loss21*pwx1+loss22*pwx2#判断为第二类的条件风险
print(r1)
print(r2)
y=[0]*24
for j in range(0,24):
if r1[j]
y[j]=1
else:
y[j]=2
j=j+1
print('基于最小风险的决策结果')
print(y)
运行结果