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

高斯朴素贝叶斯分类器模拟器 — 二维三分类

可视化二维高斯朴素贝叶斯分类器。每个类别假设为独立的一维高斯分布,按对数后验最大化进行预测。决策边界与后验概率实时更新。

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

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

计算结果
预测类别
最大后验概率 P(c*|x)
训练集再代入精度
最大对数后验 log P(c|x)+log L
特征空间与决策边界

背景色=argmax 类别区域/小圆点=训练数据/大叉=类别均值/黑叉=查询点(点击画布可移动)

查询点处的后验概率

各类别的后验 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})$$

所有类别共享相同 σ 时决策边界为直线(等价于 LDA),否则为二次曲面。

什么是高斯朴素贝叶斯分类器模拟器

🙋
"朴素贝叶斯"我经常听到,为什么叫"朴素"呢?
🎓
大致来说,是因为它假设"在给定类别的条件下所有特征都互相独立"。这个假设在现实中几乎不成立,但分类器硬要这样去算,所以被称为"朴素"。在上面的模拟器中,x 和 y 也被当作每个类别下独立的两个一维高斯,因此联合对数似然只是简单求和(对数空间)。
🙋
当我移动"σ偏移"滑块时,背景区域的颜色变化很大。增大 σ 时,红绿之间的边界变模糊,绿色区域扩张。
🎓
增大 σ 会削弱每个类别的"自信度",预测将更多依赖先验概率(类别样本占比)和到均值的距离。这里三个类别 N 都是 30,所以先验相等,边界就近似"到最近的类别均值"。反过来把 σ 调得过小,数据稍稍偏离均值,似然就急剧下降,边界会变得过于复杂。
🙋
将查询点放在 (0,0) 时,红和蓝距离相同(√5),只有绿距离为 2 较近,所以预测为绿。最大后验大约 45%,确实比其他高。
🎓
对,对数后验中绿是 −4.94,红和蓝都是 −5.44。差距很小,softmax 后大约是 45 : 27 : 27。这是典型的"低置信度预测"。实务中常加上"最高概率低于 50% 时保留判断"之类的阈值。把查询点移到 (2,-1) 附近,蓝色超过 90%,就成了有信心的预测。
🙋
把 N 降到 10 时,训练数据少,估计的 σ 波动大,边界扭曲。这种现象该怎么利用?
🎓
很好的观察。样本少时均值和方差的估计误差会直接反映在边界上。现场常用交叉验证对 σ 和先验进行正则化(加贝叶斯先验)以抑制过拟合。把 N 在 10 和 60 之间切换,看训练集再代入精度的变化,就能直观感受到这种权衡。

常见问题

严格独立的特征很少见,大多数实际问题中特征之间都存在相关性。即便如此,朴素贝叶斯在文本分类、医学诊断等许多应用中仍能给出实用的精度。原因是决策边界由 argmax_c log P(c|x) 决定,只需要分数顺序正确,而不需要概率值的校准。是否需要含协方差的模型(LDA、QDA、GMM)应通过在数据上比较 AUC 和对数损失来判断。
将文档表示为词频向量,并以多项分布(Multinomial Naive Bayes)或伯努利分布学习每个类别中各词的概率。由于输入是离散计数而非连续值,标准做法是使用多项模型而非高斯模型。在垃圾邮件判定中,"免费"、"中奖"等词的条件概率差异很大,对数似然之和具有很强的判别能力。在需要对短消息进行高精度分类的邮件分类中长期被使用。
如果训练数据中"词 w 在类别 c 中一次都未出现",则其概率为 0,取对数后为负无穷,使得包含 w 的任何样本对该类别的对数后验都变成负无穷。引入拉普拉斯平滑 P(w|c) = (N_wc + α)/(N_c + αV) 并令 α>0 即可避免 0 概率问题。本模拟器中的连续版(高斯)也存在类似问题——当 σ 接近 0 时似然会发散——因此 σ 偏移滑块设有下限。
仅当所有类别的所有特征共享相同的 σ 时,对数后验之差才关于 x 是线性的,从而给出直线边界(等价于线性判别分析 LDA)。当各类别的 σ 不同时,−0.5·log(σ²) 与 (x−μ)²/(2σ²) 两项不抵消,边界变成二次曲面(双曲线、抛物线或椭圆)。本模拟器的默认值对所有类别取 σ=1,因此初始边界基本为直线;增大 σ 偏移会使其略弯,改变样本量会让各类别的 σ 估计出现差异从而使边界弯曲。

实际应用

垃圾邮件过滤与文本分类:这是朴素贝叶斯最成功的应用。将文档表示为词频向量,假设各词独立出现,则对数后验变成各词贡献之和,可以极快地评估。配合 Bag-of-Words 或 TF-IDF,在现代机器学习兴起之前,长期作为商用垃圾邮件过滤器的主力被广泛使用。

医学诊断的决策支持:以症状或检验值作为特征,以疾病作为类别,假设各症状独立时,可以根据患者的临床所见给出最可能疾病的排序。条件概率的解释非常明确,便于医生检验结果,因此朴素贝叶斯常作为决策支持系统中具有透明性的基线模型。

异常检测的初步筛选:二分类(正常/异常)的高斯朴素贝叶斯计算量几乎为零、易于部署,因此被广泛用于从制造线的传感器数据或 IT 系统日志中快速筛选异常候选。随后衔接更高精度的模型(XGBoost、深度学习)形成两阶段流水线是工程实务中的常见做法。

自然语言处理的基线模型:在情感分析、主题分类、语言识别等任务中,朴素贝叶斯至今仍作为新型深度模型性能对比的"基线"。线性时间训练、高可解释性、在少量数据下也不易崩溃的性质,使其成为主张前沿模型优越性时的公平参照。

常见误解与注意事项

最常见的误解是因为独立性假设不成立而断定朴素贝叶斯"不能用"。实际上,即便在独立性明显不成立的文本数据上,朴素贝叶斯也能给出令人惊讶的良好精度。原因是决策边界只需要 argmax 的顺序,而不是确切的概率值。在需要绝对概率值校准的用途(如风险评估)下它较弱,但仅做硬分类时即使存在相关特征也能实用。在模拟器中调整 σ 偏移并观察训练集精度,可以体会到边界稍有扭曲而精度几乎不下降的现象。

第二个常见错误是把输出的后验概率当成"真实概率"读取。当独立性假设不成立时,朴素贝叶斯的概率输出会向 0 和 1 偏移,标榜"90% 确信"的预测真实精度可能只有 65% 左右。需要概率值时,标准做法是用 Platt 缩放或保序回归进行校准。看模拟器中即便在边界附近也很快超过 90% 置信的样子,过度自信的风险就具体可见了。

最后一点是仅用训练数据对 σ 和先验做最大似然估计在小样本下不稳定。把 N 调到 10 观察边界扭曲。实务中通常加入共轭先验做 MAP 估计,或在标准化特征后对 σ 设置拉普拉斯式下限。在本模拟器中把 σ 偏移加上 +0.05 抬高方差下限,决策边界会变得更平滑。即使被称作"朴素",也不能省略对估计稳健化的工作——过拟合就是直接的代价。