import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
#导入数据
DataList = [-3.9847, -3.5549, -1.2401, -0.9780, -0.7932, -2.8531,
-2.7605, -3.7287, -3.5414, -2.2692, -3.4549, -3.0752,
-3.9934, 2.8792, -0.9780, 0.7932, 1.1882, 3.0682,
-1.5799, -1.4885, -0.7431, -0.4221, -1.1186, 4.2532]
#两类的先验概率Fomrer:
Pro1_F = 0.9
Pro2_F = 0.1
#两类正态分布的参数
mu1, sigma1 = -2, 0.5
mu2, sigma2 = 2, 2
#损失函数
r11, r12 = 0, 6
r21, r22 = 1, 0
#为两类样本提前分配储存空间
Class1_list = []
Class2_list = []
for data in DataList:
#样本的两类后验概率
Pro1_L = (norm.pdf(data, mu1, sigma1) * Pro1_F) / (
norm.pdf(data, mu1, sigma1) * Pro1_F + norm.pdf(data, mu2, sigma2) * Pro2_F)
Pro2_L = (norm.pdf(data, mu2, sigma2) * Pro2_F) / (
norm.pdf(data, mu1, sigma1) * Pro1_F + norm.pdf(data, mu2, sigma2) * Pro2_F)
#样本的两类风险值
Risk1 = Pro1_L * r11 + Pro2_L * r12
Risk2 = Pro1_L * r21 + Pro2_L * r22
#对样本进行识别并分类
if Risk1 < Risk2:
Class1_list.append(data)
print("观测数据为{0},被分为正常细胞的风险为{1},被分为异常细胞的风险为{2},所以应被分类为正常细胞".format(data, Risk1, Risk2))
elif Risk1 > Risk2:
Class2_list.append(data)
print("观测数据为{0},被分为正常细胞的风险为{1},被分为异常细胞的风险为{2},所以应被分类为异常细胞".format(data, Risk1, Risk2))
else:
print("观测数据{}无法判断".format(data))
#创建数组作为x轴
x = np.arange(-5, 5, 0.01)
y1 = []
y2 = []
for i in range(len(x)):
#计算x轴上相应值的后验概率
P1 = (norm.pdf(x[i], mu1, sigma1) * Pro1_F) / (
norm.pdf(x[i], mu1, sigma1) * Pro1_F + norm.pdf(x[i], mu2, sigma2) * Pro2_F)
P2 = (norm.pdf(x[i], mu2, sigma2) * Pro2_F) / (
norm.pdf(x[i], mu1, sigma1) * Pro1_F + norm.pdf(x[i], mu2, sigma2) * Pro2_F)
#计算x轴上相应值的风险函数并将相应值作为y值
y1.append(P1 * r11 + P2 * r12)
y2.append(P1 * r21 + P2 * r22)
#打开画布
plt.figure()
plt.plot(x, y1, 'r', label="正常细胞的风险曲线")
plt.plot(x, y2, 'b', label="异常细胞的风险曲线")
plt.plot(Class1_list, len(Class1_list) * [0], 'r*', label="正常细胞") #由于数据点的y值均为0,且y值与x值必须相同长度,因此需:len(Class1_list) * [0]
plt.plot(Class2_list, len(Class2_list) * [0], 'bs', label="异常细胞")
#显示图像
plt.show()
模式识别实验2:利用最小风险贝叶斯准则识别样本并做出相应图像
最新推荐文章于 2023-11-28 09:55:24 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)