高斯朴素贝叶斯分类模拟器 返回
机器学习模拟器

高斯朴素贝叶斯分类模拟器 — 2D 3类

2个特征的高斯朴素贝叶斯分类器的可视化。假设每个类的1D正态分布相互独立,选择使对数后验最大化的类进行预测。决策边界和后验概率实时变化。

参数设置
查询点 x
查询点 y
σ 偏移(全数据统一)
每类样本数 N

学习数据由固定种子(seed=42)的确定性LCG生成。也可以通过单击画布设置查询点。

计算结果
预测类
最大后验概率 P(c*|x)
学习数据重代入精度
最大对数后验 log P(c|x)+log L
特征空间和决策边界

背景色 = argmax类区域 / 小圆 = 学习数据 / 大X = 类平均值 / 黑X = 查询点(点击画布移动)

查询点的后验概率

各类的后验概率 P(c|x)。移动查询点时值会更新。

理论和主要公式

高斯朴素贝叶斯分类器假设每个类 $c$ 的每个特征 $x_j$ 服从条件独立的正态分布 $\mathcal{N}(\mu_{cj},\sigma_{cj}^2)$。

类条件对数似然(假设特征之间独立):

$$\log p(\mathbf{x}\mid c) = \sum_{j=1}^{d}\left[-\tfrac{1}{2}\log(2\pi\sigma_{cj}^{2})-\tfrac{(x_j-\mu_{cj})^2}{2\sigma_{cj}^{2}}\right]$$

对数后验(贝叶斯定理,省略正规化常数 $\log p(\mathbf{x})$):

$$\log p(c\mid \mathbf{x}) = \log p(\mathbf{x}\mid c)+\log P(c)$$

预测类最大化对数后验:

$$\hat{c} = \arg\max_{c}\,\log p(c\mid \mathbf{x})$$

当所有类的 $\sigma$ 相等时,决策边界是线性的(等价于LDA),不同时是2阶曲面。

高斯朴素贝叶斯分类模拟器说明

🙋
为什么"朴素"贝叶斯被称为"朴素"呢?
🎓
简单说,就是它假设"只要知道了类,所有特征之间就相互独立"。这个假设在现实中几乎不可能成立,但它就是敢这样强行假设,所以被称为"朴素的"分类器。在这个模拟器中,x和y也是分别作为1D高斯分布独立处理的,合成似然就是简单相加(对数形式)。
🙋
我注意到当你移动"σ偏移"滑块时,背景色的分界线会发生很大变化。σ变大时,红色和绿色的边界变得模糊,绿色区域扩大。
🎓
这正是关键!当σ变大时,每个类的"确信度"就降低了,决策边界就主要由事先概率(各类的样本比例)和距离决定。现在三个类的N都是30,事先概率相等。所以边界基本上变成了"离哪个类中心最近"。反之,如果σ太小,即使数据稍微偏离平均值,似然也会急剧下降,边界会变得非常复杂。
🙋
当我把查询点放在(0,0)时,红类和蓝类的距离相同(√5),而绿类只有距离2,所以被预测为绿类。后验概率约为45%,比其他的高。
🎓
完全正确。对数后验中,绿色为-4.94,红和蓝为-5.44。差异很小,所以softmax给出约45%:27%:27%的分布。这就是"低信心预测"的例子。实际应用中,人们经常设置一个阈值,如"如果最大概率小于50%就保持判断"。如果你把查询点移到(2,-1)附近,蓝色会超过90%,变成高信心预测。
🙋
把"N"减少到10时,学习数据较少,估计的σ会有很大差异,所以决策边界变得歪曲。这在实际中如何使用?
🎓
很敏锐的观察!样本少时,平均值和方差的估计误差会直接影响边界。这就是为什么实际应用中使用"交叉验证"来正则化σ和事先概率(引入贝叶斯先验)以防止过拟合。用模拟器比较N=10和N=60,看学习数据重代入精度的变化,会让你对这一点有直觉认识。

常见问题

严格独立的特征很少见,许多实际问题中特征之间存在相关性。尽管如此,朴素贝叶斯在文本分类、医疗诊断等许多应用中仍能输出实用的精度。这是因为,确定决策边界位置的 argmax_c log P(c|x) 只需要概率值本身的顺序正确,而不需要概率值本身的准确性。是否需要包含协方差的模型(线性判别分析、二次判别分析或 GMM)应通过数据中的 AUC、对数损失进行比较来确定。
将文档表示为单词出现次数的向量,学习每个类的每个单词的概率,使用多项分布(多项朴素贝叶斯)或伯努利分布。因为是离散计数而不是连续值,所以标准做法是使用多项模型而不是高斯模型。在垃圾邮件判定中,"免费"、"中奖"等词的条件概率差异很大,因此对数似然和具有很强的判别力。这在短消息中需要高精度的电子邮件分类中长期使用。
当学习数据中出现"类 c 中的单词 w 从未出现"的情况时,概率变为 0,取对数后为 −∞,导致该类的对数后验始终为 −∞。使用拉普拉斯平滑化 P(w|c) = (N_wc + α)/(N_c + αV),通过 α>0 来避免零。在本模拟器的连续版本(高斯)中,当 σ 接近 0 时似然会发散,因此不应过度降低 σ 偏移。
仅当所有类的所有特征的 σ 相等时,对数后验的差对 x 是线性的,决策边界是直线(等价于线性判别分析)。当类的 σ 不同时,−0.5·log(σ²) 和 (x−μ)²/(2σ²) 项仍然存在,边界是 2 阶曲面(双曲线、抛物线或椭圆)。本模拟器的初始值是所有类 σ=1,所以初始显示的边界几乎是直线,但增加 σ 偏移会减弱曲率,改变样本数会导致每个类的估计 σ 变化,边界会弯曲。

实际应用

垃圾邮件和文本分类:朴素贝叶斯最成功的应用。将文档表示为单词出现次数向量,假设每个词独立发生,对数后验就变成单词贡献的和,极其高速地进行判定。结合词袋模型或TF-IDF,在现代机器学习出现之前,就一直是商用垃圾邮件过滤的标准方法。

医疗诊断辅助:用症状和检查值作为特征,疾病作为类,假设每个症状独立,可以得到患者所见最可能的疾病排名。条件概率的解释明确,医生容易验证结果,作为决策支持系统的朴素基准模型被广泛采用。

异常检测初步筛查:2类(正常/异常)高斯朴素贝叶斯计算量接近零,部署极其容易,常用于制造业生产线传感器数据或IT系统日志的高速外值候选物筛分。后续接上精度高的模型(XGBoost或深度学习)形成两阶段配置是业界常见做法。

自然语言处理的基准模型:在情感分析、话题分类、语言识别等NLP任务中,作为新型深度模型性能比较的"基线"而继续被使用。线性时间训练、高度可解释性、少量数据也不崩溃的性质,使其成为主张最新模型优越性时的公平对照组。

常见误解和注意点

最常见的误解是,因为独立假设明显破裂就武断地认为朴素贝叶斯"不可用"。其实特征间相关性明显的文本数据中,朴素贝叶斯仍能输出惊人的好精度。这是因为决策边界只需要概率值本身的顺序而不需要绝对值准确。对于需要校准概率值的应用(风险评估等),它表现较弱;但仅做硬分类时,即使特征有相关性也实用。在模拟器中改变σ偏移,看学习数据重代入精度,会发现决策边界即使有所弯曲,精度也下降不多。

第二常见的错误是,把输出的后验概率当成"真实概率"来读。朴素贝叶斯的概率输出在独立假设破裂时,常常偏向0和1,"90%确信"的显示实际正确率可能只有65%。需要概率值时标准做法是用Platt缩放或Isotonic回归来校准。在这个模拟器中,即使距离几乎相同的点最大概率也会迅速超过90%,直观感受过信心的风险。

最后,如果只用学习数据的最大似然估计σ和事先概率,小样本时会变得不稳定。请尝试把N改成10看边界的歪曲。实际应用中标准做法是引入共轭先验的MAP估计,或在特征标准化后给σ设置下限,类似拉普拉斯的策略。本模拟器中σ的最小值被固定为0.05来避免分散爆炸。"朴素"的名号也不能成为跳过估计稳健化的理由,否则立即陷入过拟合。

使用指南

  1. 通过滑块设置X轴和Y轴输入值(slQXVal, slQYVal)在0~10范围内,指定2维空间中的预测点
  2. 调整学习数据离散程度(slSigmaShiftVal)在0.1~2.0范围内,控制每个类的高斯分布标准差
  3. 在20~500样本间改变学习数据数量(slNVal),观察3个类的决策边界稳定性和分类精度的变化
  4. 实时确认4项统计量:预测类、最大后验概率P(c*|x)、重代入精度、最大对数后验log P(c|x)+log L

具体计算示例

在钢铁制造质量检验中,通过抗拉强度(X轴:250~450 MPa)和伸长率(Y轴:15~40%)两项特性将钢材分为3个等级。用300个学习样本、各类σ=1.2训练后,对输入点(X=350 MPa, Y=25%)进行预测,可得类A后验概率0.78、最大对数后验-2.1、重代入精度达94%。σ缩小到0.5时,类边界急剧变陡,未知数据的泛化性能呈下降趋势

实务注意事项