模式识别实验2:利用最小风险贝叶斯准则识别样本并做出相应图像

本文介绍了使用先验概率和两类正态分布(μ1=2, σ1=0.5与μ2=2, σ2=2)对观测数据进行分类的方法。通过计算后验概率和风险值,决定样本是正常细胞还是异常细胞。同时,展示了风险曲线和分类结果可视化。
摘要由CSDN通过智能技术生成
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()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值