二、实验原理
贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:
1.已知类条件概率密度参数表达式和先验概率
2.利用贝叶斯公式转换成后验概率
3.根据后验概率大小进行决策分类。
因为两类条件概率密度函数符合不同正态分布,因此可以根据两类数据集的分布计算出两类判别函数。判断时,该点哪类判别函数大,则判为哪类。
根据密度公式及判别函数
可得
其中
使g1(x)=g2(x),即可获得x2关于x1的函数,为两类在x1及x2坐标系下的决策面
具体实现程序与代码解释如下
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import scipy.stats as stats
import sympy
from sympy import *
# In[] 第一类数据计算
Pw1=0.5 #1类先验概率
E1=np.matrix([[1,0],[0,2]]) #1类 协方差矩阵
E1_=E1.I #协方差矩阵逆矩阵
u1=np.matrix([[-1,0]]).T #平均值矩阵
W1=-0.5*E1_ #参量W1
w1=E1_*u1 #参量w1
w10=-0.5*u1.T*E1_*u1 #参量w01
# In[] 第二类数据计算 各行作用同上
Pw2=0.5
E2=np.matrix([[2,0],[0,1]])
E2_=E2.I
u2=np.matrix([[1,2]]).T
W2=-0.5*E2_
w2=E2_*u2
w20=-0.5*u2.T*E2_*u2
# In[] 求解判别函数
x1=Symbol("x1") #定义变量x1 x1和x2为两个维度的坐标
x2=Symbol("x2") #定义变量x2
g1x=np.matrix([[x1],[x2]]).T*W1*np.matrix([[x1],[x2]])+w1.T*np.matrix([[x1],[x2]])+w10 #1类判别函数
g2x=np.matrix([[x1],[x2]]).T*W2*np.matrix([[x1],[x2]])+(w2.T*np.matrix([[x1],[x2]]))+w20 #2类判别函数
a=solve(g1x[0,0]-g2x[0,0],x2) #求x1与x2函数式
print("x2=%s"%a) #输出决策面函数式
a1 = np.array(a) #获取函数式
b = [0]*len(a1) #函数式个数
x1 = np.linspace( -5, 5, 100) #作图x1坐标
for i in range(len(a1)): #循环获取两个函数式x2坐标 此处有两个函数式循环两遍
b[i] = str(a1[i])
b_m = b[i].replace('[','').replace(']','')
b[i] = b_m
for i in range(len(a1)): #绘制每一个决策面 此处有两个函数式循环两遍
plt.plot(x1,eval(b[i]),color='#000000') #画图
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('decision function')
# In[] 随机生成散点
x11 = np.random.normal(-1,1,500) # 随机产生500个平均值为-1,方差为1的浮点数,即第一簇点的x1轴坐标
x21 = np.random.normal(0,2**0.5,500) # 随机产生500个平均值为0,方差为2的浮点数,即第一簇点的x2轴坐标
x12 = np.random.normal(1,2**0.5,500)
x22 = np.random.normal(2,1,500)
colors1 = '#00CEF1' #点的颜色
colors2 = '#DC141C'
area = np.pi * 2.5**2 # 点面积
plt.scatter(x11, x21, s=area, c=colors1, alpha=0.4, label='A')
plt.scatter(x12, x22, s=area, c=colors2, alpha=0.4, label='B')# 画散点图
ratru1=len(x21[x21<1-x11])/500 #计算第一类分类正确率
ratru2=len(x22[x22>1-x12])/500 #计算第二类分类正确率
print("第一类正确率=%s"%ratru1)
print("第二类正确率=%s"%ratru2)
输出结果如下:
由于散点随机生成,每次计算得到的正确率不相等,但结果相近
x2=[1.0 - x1, x1 + 7.0] 第一类正确率=0.862 第二类正确率=0.892



