模式识别中关于Bayes分类器设计

本文介绍了如何使用Python编程实现基于正态分布的最小错误和最小风险贝叶斯分类器,通过给定数据和参数,计算后验概率并绘制分布曲线和分类结果,同时展示了两种分类方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:

1 掌握正态分布下的最小错误贝叶斯分类器的设计

2 掌握正态分布下的最小风险贝叶斯分类器的设计

实验环境

Python

实验数据:

假定某个区域细胞识别中正常细胞(w1)和异常细胞(w2)两类的先验概率分别是:

P(w1)=0.9, P(w2)=0.1。

现有一系列呆观察的细胞,其观察值为x:

-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

已知类条件概率分布服从正态分布:

P(x|w1)服从的正太分布为(-2, 0.25)

P(x|w2)服从的正太分布为(2, 4)

实验要求:

1请根据上述数据设计程序,画出相应的分布曲线和分类结果,并比较。

2 若最小风险贝叶斯决策表如下表

决策             状态

w1

w2

a1

0

6

a2

1

0

所示:

请根据上述数据设计程序,画出相应的分布曲线和分类结果,并比较。

以下是我的代码部分

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 给定的数据和参数
data = [-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]
prior_w1 = 0.9
prior_w2 = 0.1

# 类条件概率分布的参数
mean_w1 = -2
variance_w1 = 0.25
std_dev_w1 = np.sqrt(variance_w1)

mean_w2 = 2
variance_w2 = 4
std_dev_w2 = np.sqrt(variance_w2)

# 定义正态分布的概率密度函数
def pdf(x, mean, std_dev):
    return norm.pdf(x, mean, std_dev)

# 计算后验概率
def compute_posterior(x):
    likelihood_w1 = pdf(x, mean_w1, std_dev_w1)
    likelihood_w2 = pdf(x, mean_w2, std_dev_w2)
    evidence = (prior_w1 * likelihood_w1) + (prior_w2 * likelihood_w2)
    posterior_w1 = (prior_w1 * likelihood_w1) / evidence
    posterior_w2 = (prior_w2 * likelihood_w2) / evidence
    return posterior_w1, posterior_w2

# 最小错误贝叶斯分类器
def minimum_error_classifier(x):
    posterior_w1, posterior_w2 = compute_posterior(x)
    if posterior_w1 > posterior_w2:
        return "w1"
    else:
        return "w2"

# 最小风险贝叶斯分类器
def minimum_risk_classifier(x):
    posterior_w1, posterior_w2 = compute_posterior(x)
    decision_a1 = 0 * posterior_w1 + 6 * posterior_w2
    decision_a2 = 1 * posterior_w1 + 0 * posterior_w2
    if decision_a1 < decision_a2:
        return "a1"
    else:
        return "a2"

# 生成绘制概率密度函数曲线的x值
x_values = np.linspace(-10, 10, 1000)

# 计算并绘制概率密度函数曲线
plt.plot(x_values, pdf(x_values, mean_w1, std_dev_w1), label='P(x|w1)')
plt.plot(x_values, pdf(x_values, mean_w2, std_dev_w2), label='P(x|w2)')

# 绘制决策界面
plt.axvline(x=0, color='r', linestyle='--', label='Decision Boundary')

# 分类结果示意
for point in data:
    class_w1 = minimum_error_classifier(point)
    class_w2 = minimum_risk_classifier(point)
    plt.scatter(point, 0, color='g' if class_w1 == 'w1' else 'b', marker='o', label=f'Classified as {class_w1}')
    plt.scatter(point, 0, color='g' if class_w2 == 'a1' else 'b', marker='x', label=f'Classified as {class_w2}')

plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Normal Distribution and Bayesian Classification')
plt.legend()
plt.show()

对代码的解释:

  1. 导入必要的库:

    • numpy:用于数值计算。
    • matplotlib.pyplot:用于绘图。
    • scipy.stats.norm:用于生成正态分布的概率密度函数。
  2. 定义了一些数据和参数:

    • data:给定的观察值列表,这些观察值是细胞识别中正常细胞和异常细胞的观察结果。
    • prior_w1prior_w2:分别是正常细胞和异常细胞的先验概率。
    • mean_w1variance_w1std_dev_w1:正常细胞的类条件概率分布的均值、方差和标准差。
    • mean_w2variance_w2std_dev_w2:异常细胞的类条件概率分布的均值、方差和标准差。
  3. 定义了正态分布的概率密度函数 pdf(x, mean, std_dev),该函数使用 scipy.stats.norm.pdf 来计算给定均值和标准差的正态分布在给定 x 值处的概率密度。

  4. 定义了 compute_posterior(x) 函数,该函数计算了给定观察值 x 下的后验概率。它使用类条件概率分布(正态分布)和先验概率来计算后验概率,并返回正常细胞和异常细胞的后验概率。

  5. 实现了最小错误贝叶斯分类器 minimum_error_classifier(x),该函数根据后验概率来决定将观察值 x 分为哪个类别(正常细胞 w1 或异常细胞 w2)。它选择后验概率较大的类别作为分类结果。

  6. 实现了最小风险贝叶斯分类器 minimum_risk_classifier(x),该函数根据后验概率和提供的决策表来决定将观察值 x 分为哪个类别(a1a2)。它根据决策表中的风险值计算,并选择风险较小的类别作为分类结果。

  7. 生成了绘制概率密度函数曲线的 x_values,该变量在范围 -1010 内生成了一系列 x 值。

  8. 使用 plt.plot 函数绘制了正态分布的概率密度函数曲线,分别绘制了 P(x|w1)P(x|w2)

  9. 使用 plt.axvline 函数绘制了决策界面,该界面在 x=0 处画了一条红色虚线,表示分类决策的分界线。

  10. 使用循环遍历了给定的观察值 data,对每个观察值进行最小错误贝叶斯分类和最小风险贝叶斯分类,并绘制了示意图来表示分类结果。

  11. 最后,添加了标签、标题和图例,并使用 plt.show() 函数显示图形。

这段代码帮助你理解如何基于正态分布的类条件概率分布、先验概率以及风险表来实现最小错误贝叶斯分类器和最小风险贝叶斯分类器,并可视化分类结果。

实验结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值