naivebayes 朴素贝叶斯

模型概述

朴素贝叶斯是一类基于 贝叶斯定理 的概率分类方法。它的核心假设是:给定类别(class),特征之间是 条件独立 的(这就是“朴素”之处)。在该假设下,可以把联合似然分解成每个特征的条件概率之积,从而得到类别的后验概率并进行分类(通常取后验概率最大的类别)。

基础原理

一 训练
1. 计算先验 (或设置为均匀/用户提供的先验)。
2. 统计每类下每个特征的计数 (例如词频)。
3. 应用拉普拉斯平滑。
4. 存储 (便于预测时加和)。
复杂度:一次扫描训练集做统计,时间复杂度 (N样本数,d特征维数),空间主要存储参数矩阵 。
二 预测
对于一个样本 $(x)$:
1. 计算每个类别的得分(对数后验,避免下溢)
2. 取最大得分对应的类别
3. 如果需要概率,可以把 $(s_k)$ 用 softmax 做归一化(注意数值稳定性,减去 max)。

关键公式
$1、 P(y \mid x) = \frac{P(y)\,P(x \mid y)}{P(x)}$

核心公式 1贝叶斯定理(分类决策的基础)
$y$: 类别, $0/1$
$x$: 输入样本(可以是多个特征构成的向量)
$P(y \mid x)$: 后验概率 观测到特征 $(x)$ 后属于类别 $(y)$ 的概率(我们最终要的)
$P(y)$: 先验概率 不看特征,仅按统计得到的类别概率(如垃圾邮件比例)
$P(x \mid y)$: 似然 在给定类别 $(y)$ 下,特征 $(x)$ 出现的概率
$P(x)$: 证据 所有类别下产生 $(x)$ 的加权总概率(可以忽略,分类时不影响 argmax)
--------------------------------------------------------------------------------

$2、 P(x \mid y) = \prod_{j=1}^{d} P(x_j \mid y)$

核心公式 2朴素条件独立假设
$x = (x_1, x_2, ..., x_d)$: 输入样本的 $d$ 个特征
$x_j$: 第 $j$ 个特征
$P(x \mid y)$: 整个样本在类别 $y$ 下出现的概率(真实表达非常复杂)
$P(x_j \mid y)$: 单个特征在类别 $y$ 下的概率
$\prod$: 将所有特征概率相乘
--------------------------------------------------------------------------------

$3、P(y \mid x) \propto P(y)\prod_{j=1}^{d} P(x_j \mid y)$

朴素贝叶斯的基本比例关系
1)$(P(y \mid x))$
* 代表:“在观察到特征向量 (x) 后,样本属于类别 (y) 的概率”,
* 叫做 后验概率(posterior probability)。
* 这是模型最终想得到的东西。
2)$(\propto)$
* 意为 “成正比”。
* 表示左边的概率与右边的表达式成比例,但缺少一个统一的分母(归一化项)。
* 因为比较分类时不需要完整分母(所有类相同),所以只用比例即可。
3)$(P(y))$
* “类别 $(y)$ 的先验概率$(prior)$”
* 表示:在没有看到任何特征之前,类别 $(y)$ 本身出现的可能性。
例如:如果训练中 `正常:70%`,`异常:30%`,那先验就是 0.7 vs 0.3。
4)$(\prod_{j=1}^{d} P(x_j \mid y))$
* 表示对所有特征做“条件概率的连乘”。
* 意义:在类别 (y) 已知的条件下,
每个特征 (x_j) 出现的概率是多少。
* $(d)$:特征总数。
* $(x_j)$:第 $(j)$ 个特征(可以是词频、取值、是否出现等)。
* 乘号 $(\prod)$ 表示从第 1 个特征一直乘到第 d 个特征。
⚠ 因为朴素贝叶斯假设特征间独立,所以可以相乘。
> 后验概率 ∝ 先验 × 所有特征出现的概率(独立相乘)
--------------------------------------------------------------------------------

$4、 \hat{y} = \arg\max_{k} \left[ P(y=c_k)\prod_{j=1}^{d} P(x_j \mid y=c_k) \right]$

用概率乘积进行分类预测
1)$(\hat{y})$
* 模型输出的最终预测类别
* 读作:“预测的 y” 或 “最佳类别”
2)$(\arg\max_{k})$
* 找出使括号内表达式最大的类别编号 (k)
* 例如类别集合是:
((c_1, c_2, c_3)),
则找哪个类别概率最高。
3)$(c_k)$
* 第 $(k)$ 个类别。
* 可能是:0/1,A/B/C,正常/异常 等。
4)$(P(y=c_k))$
* 类别 $(c_k)$ 的先验概率
* 类别本身出现的可能性。
5)$(\prod_{j=1}^{d} P(x_j \mid y=c_k))$
* 在类别 (c_k) 条件下,每个特征出现的概率全部相乘
* 越大说明特征越支持该类别
> 选择让“先验概率 × 似然概率”最大的类别作为预测结果。
--------------------------------------------------------------------------------

$5、 \hat{y} = \arg\max_{k} \left[ \log P(y=c_k) + \sum_{j=1}^{d} \log P(x_j \mid y=c_k) \right]$

对公式 4 取对数,避免数值下溢
1)$(\log P(y=c_k))$
* 对先验概率取对数
* 目的:把乘法变成加法
2)$(\sum_{j=1}^{d} \log P(x_j \mid y=c_k))$
* 把所有特征的条件概率做对数,再求和
* 用加法代替乘法,使数值更稳定
* 避免“很多小数连乘 → 数值变成 0” 的问题
3)$(\arg\max_{k})$
* 仍然寻找得到最大值的类别 $(c_k)$
> 用对数把所有概率乘积变成加法,提高计算稳定性,
> 最后选最大值对应的类别。
--------------------------------------------------------------------------------

超参数

完整计算机制

朴素贝叶斯的计算过程严格分成 三个核心步骤,每一步都有明确意义。
① 计算“先验概率”:每个类别本身的基础概率
这是训练时的第一步,就是:
统计每个类别在训练集里出现得有多少。
这叫做:
类别的初始倾向
没有看到任何特征前的概率
你可以理解为模型的“直觉判断”,这是第一步。
② 计算“似然概率”:在每个类别中,各特征出现的概率
第二步是朴素贝叶斯最重要的地方。
意思是:
在某一类别中,某个特征是多还是少?常见还是罕见?
在这一阶段,模型会为每个类别统计:
某词出现的频率(文本模型)
某数值大概落在哪个区间(高斯模型)
某特征是 0 还是 1(伯努利模型)
本质是:
模型学习每类的特征模式。
这就是“似然”。
③ 模型预测时:把“先验 × 似然”组合,得到最终的后验概率
当你给模型一个新的样本时,它会进行这三步:
第一步:查看每个类别的“先验”,看哪个类别本来概率大
第二步:查看样本的每个特征在该类别的“似然概率”
第三步:把所有证据整合,算出最终概率,谁最高就是谁
你可以把它理解成:
> “初始直觉(先验) × 证据强度(似然) = 最后判断(后验)”
最后选:
> 后验概率最大的类别
就是分类结果。

⭐ 用一句话总结朴素贝叶斯的计算机制:

> 先看每类本来有多常见,然后看样本的特征对哪一类更有支持,把所有信息乘在一起,得到最终判断。

优势与局限

• 训练与预测都非常快(线性复杂度,矩阵乘加)。
• 存储参数少(只存类先验 + 条件概率矩阵)。
• 在高维稀疏数据(例如文本)上表现优秀且鲁棒。
• 对缺失值可天然处理(在求和时略去缺失的特征或者估计 $(P(x_j|y))$)。
• 可解释性较好:每个特征对最终决策的 log 概率贡献可查看。
• 适合小数据、实时在线学习或基线模型


• 条件独立性假设通常不成立:当特征强相关时,NB 的概率估计会失真,但分类准确率有时仍然不错(因为判别边界可能仍然正确)。
• 不擅长处理连续特征强非高斯分布(Gaussian 假设失真时须考虑离散化或核密度估计)。
• Multinomial NB 假设特征是计数且相互独立(词之间的共现信息被丢弃)。
• 对输出概率的校准通常较差(概率不可靠),可以用 $Platt scaling / isotonic regression$ 进行校准。
• 类别不平衡会影响先验估计与决策,需要重采样或调整 class_prior

预测的例子

数据(按时间顺序):

1: 236

2: 366

3: 599

4: 688

5: 122

我们把前 4 个可以构造为训练样本(每个样本用当前值预测下一值):

训练样本 (X -> Y)

236 -> 366

366 -> 599

599 -> 688

688 -> 122

把数字拆成各位(H, T, U):

样本 X (H,T,U) Y (H',T',U')

-- --------- ------------

1 (2,3,6) (3,6,6)

2 (3,6,6) (5,9,9)

3 (5,9,9) (6,8,8)

4 (6,8,8) (1,2,2)

我们要预测 第 6 项:也就是在已知当前期 = `122`(即 X = 122,特征 (1,2,2))的情况下预测下期 (Y)。

训练集中可用样本总数 (N=4)。类别空间为数字 0..9(所以 (K=10)),各位特征的取值也是 0..9((V=10))。

为避免零概率,我们使用 拉普拉斯平滑 $(\alpha=1)$。

---

二、按位构建朴素贝叶斯并一步步计算(详细数值)

严格列出先验与条件概率数值。

---预测“下期百位” (H')

训练集中百位目标值 (H') 的计数(从 Y 列):

* 3 出现 1 次(来自样本 1)

* 5 出现 1 次(样本 2)

* 6 出现 1 次(样本 3)

* 1 出现 1 次(样本 4)

其它数字 0,2,4,7,8,9 出现 0 次

应用拉普拉斯平滑 (\alpha=1),先验:

* 对于已出现过的类(1,3,5,6):先验 = $((1+1)/14 = 2/14 \approx 0.142857)$。

* 对于未出现的类(例如 0):先验 = ($(0+1)/14 = 1/14 \approx 0.0714286$)。

现在我们要计算条件概率 (P(x_j \mid H'=c)),这里的特征是 X 的三位:(H, T, U) = (1,2,2)(因为当前 X = 122)。

对于某个类别 (c),看训练集中所有使得 (H'=c) 的样本,统计这些样本的 X 的各位取值,再做拉普拉斯平滑。注意:在我们的训练集中,每个 (c)(在已见过的 c)只对应恰好 1 个训练样本,所以条件计数非常稀疏,下面严格计算:

* 例如看 (c=3):训练中只有样本 1 有 (H'=3),其对应的 X=(2,3,6)。

因此在类别 (c=3) 下:

* 关于特征 (X.H)(上期百位),只有值 2 出现 1 次;其他值(包括 1)出现 0 次。

所以对于任何已见的类(1、3、5、6),因为对应的训练样本与当前 X=(1,2,2) 的三位 都不匹配(没有训练样本的 X 的某位是 1 或 2),每个条件概率项都等于 $(1/11 \approx 0.090909)$。

计算数值:

* $(2/14 \approx 0.1428571429)$

* $((1/11)^3 \approx 0.00075131)$(注意:$(1/11 \approx 0.090909),立方约 (0.0007513))$

* 乘得 $(\approx 0.142857 \times 0.00075131 \approx 0.00010733)$.

对于未见的类(例如 0),先验为 $(1/14 \approx 0.0714286)$,而且因为在该类下训练样本数为 0,条件概率用 $((0+1)/(0 + 10) = 1/10 = 0.1)$(这里分母是 $(0 + \alpha V = 10)$)。

比较两类情况:

* 已见类(1,3,5,6)的 $score ≈ 0.00010733$

* 未见类(例如 0)的 $score ≈ 0.00007143$

结论(百位):在百位预测上,朴素贝叶斯把概率稍微倾向已见过的类(1,3,5,6),但这四个已见类的 score 完全相等(因为对于每个已见类,关于 X 的三位条件概率都变成 (1/11)),所以朴素贝叶斯无法在这四个类之间区分出更优者 —— 它们并列为最大后验。

---

---预测“下期十位” (T') 与“下期个位” (U')

对十位、个位做同样计算。训练集中十位的分布(Y 的十位)为:6,9,8,2(各出现 1 次)。与上一节完全类似:

* 已见类(2,6,8,9)先验 = $(2/14 \approx 0.142857)$,条件概率每项 = $(1/11)$(因为对应类别只有一个训练样本,其 X 与新 X=(1,2,2) 在各位都不匹配),所以每个已见类的 score 同样 ≈ 0.00010733;

* 未见类 score ≈ 0.00007143。

因此十位和个位也都出现“几个已见类并列最高”的情况(十位并列最高的类集合 = {2,6,8,9};个位同样 = {2,6,8,9})。

---

三、把三个位合并成完整三位数的决策(独立预测的结果)

我们用“按位独立地做三个朴素贝叶斯”,因此最终的可能预测是三个位各自的 argmax 组合。但在这里,每个位的 top 候选都是一个并列集合:

* 百位的最高候选集合: {1, 3, 5, 6}(等概率并列)

* 十位的最高候选集合: {2, 6, 8, 9}(等概率并列)

* 个位的最高候选集合: {2, 6, 8, 9}(等概率并列)

因此朴素贝叶斯在这个训练集上给出的不是单一确定的第六项,而是一个由这些候选位组合起来的候选集合(理论上最多 $(4\times4\times4=64) $种组合),其中包含像 `688`、`122`、`599`、`366` 等训练中出现过的样本组合。无法确定唯一答案——因为数据太少、信息太稀疏,朴素贝叶斯的后验在若干类别之间完全平分(并列)。

动画演示

发现更多可能性

默认固定广告

免费下载 数据序列智能分析

立即体验强大的数字序列预测与分析工具(280MB,推荐天翼网盘下载 访问码:bq4f)

天翼网盘下载 访问码:bq4f 其他下载

推荐内容

默认悬浮广告