朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理和特征条件独立性假设的简单而有效的分类算法。它被称为“朴素”,是因为它假设数据的各特征在类别已知的情况下是相互独立的,这一假设在实际情况中通常不完全成立,但算法在很多任务中仍然表现良好。
1. 朴素贝叶斯的核心原理
朴素贝叶斯的基本思想是:通过给定特征 X X X 的条件下,预测样本属于某类别 c k c_k ck 的后验概率 P ( c k ∣ X ) P(c_k|X) P(ck∣X),选择后验概率最大的类别作为分类结果。
核心公式
根据贝叶斯定理,后验概率可以表示为:
P
(
c
k
∣
X
)
=
P
(
X
∣
c
k
)
P
(
c
k
)
P
(
X
)
P(c_k|X) = \frac{P(X|c_k)P(c_k)}{P(X)}
P(ck∣X)=P(X)P(X∣ck)P(ck)
- P ( c k ∣ X ) P(c_k|X) P(ck∣X):后验概率,表示在给定样本特征 X X X 的条件下,样本属于类别 c k c_k ck 的概率。
- P ( X ∣ c k ) P(X|c_k) P(X∣ck):类条件概率,表示在类别 c k c_k ck 已知的情况下,样本特征 X X X 出现的概率。
- P ( c k ) P(c_k) P(ck):先验概率,表示类别 c k c_k ck 本身的概率。
- P ( X ) P(X) P(X):边际概率,用于归一化后验概率,表示样本特征 X X X 出现的总概率。
由于 P ( X ) P(X) P(X) 对所有类别 c k c_k ck 是相同的,因此在实际分类中可以忽略,分类只需要比较 P ( X ∣ c k ) P ( c k ) P(X|c_k)P(c_k) P(X∣ck)P(ck)。
条件独立性假设
为了简化计算,朴素贝叶斯假设特征之间是条件独立的,即:
P
(
X
∣
c
k
)
=
P
(
X
(
1
)
,
X
(
2
)
,
⋯
,
X
(
n
)
∣
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
∣
c
k
)
P(X|c_k) = P(X^{(1)}, X^{(2)}, \cdots, X^{(n)}|c_k) = \prod_{j=1}^n P(X^{(j)}|c_k)
P(X∣ck)=P(X(1),X(2),⋯,X(n)∣ck)=j=1∏nP(X(j)∣ck)
- 这里 X ( j ) X^{(j)} X(j) 表示第 j j j 个特征。
- 条件独立性假设使得计算 P ( X ∣ c k ) P(X|c_k) P(X∣ck) 的复杂度大大降低。
2. 朴素贝叶斯的分类步骤
1. 训练阶段
-
计算先验概率:
根据训练数据中每个类别的样本比例,计算每个类别的先验概率 P ( c k ) P(c_k) P(ck):
P ( c k ) = 类别 c k 的样本数 样本总数 P(c_k) = \frac{\text{类别 $c_k$ 的样本数}}{\text{样本总数}} P(ck)=样本总数类别 ck 的样本数 -
计算条件概率:
根据训练数据,计算每个特征在各类别条件下的条件概率 P ( X ( j ) ∣ c k ) P(X^{(j)}|c_k) P(X(j)∣ck)。
2. 分类阶段
-
对于一个新的样本 X = ( x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) ) X = (x^{(1)}, x^{(2)}, \cdots, x^{(n)}) X=(x(1),x(2),⋯,x(n)),根据公式:
P ( c k ∣ X ) ∝ P ( c k ) ∏ j = 1 n P ( X ( j ) ∣ c k ) P(c_k|X) \propto P(c_k) \prod_{j=1}^n P(X^{(j)}|c_k) P(ck∣X)∝P(ck)j=1∏nP(X(j)∣ck) -
比较所有类别的 P ( c k ∣ X ) P(c_k|X) P(ck∣X),选择概率最大的类别作为分类结果:
y ^ = arg max c k P ( c k ) ∏ j = 1 n P ( X ( j ) ∣ c k ) \hat{y} = \arg\max_{c_k} P(c_k) \prod_{j=1}^n P(X^{(j)}|c_k) y^=argckmaxP(ck)j=1∏nP(X(j)∣ck)
3. 常见朴素贝叶斯模型
根据特征的类型,朴素贝叶斯可以分为以下几类:
1. 高斯朴素贝叶斯
- 用于连续型数据,假设每个类别的特征服从高斯分布(正态分布)。
- 条件概率计算公式:
P ( X ( j ) ∣ c k ) = 1 2 π σ k , j 2 exp ( − ( X ( j ) − μ k , j ) 2 2 σ k , j 2 ) P(X^{(j)}|c_k) = \frac{1}{\sqrt{2\pi\sigma_{k,j}^2}} \exp\left(-\frac{(X^{(j)}-\mu_{k,j})^2}{2\sigma_{k,j}^2}\right) P(X(j)∣ck)=2πσk,j21exp(−2σk,j2(X(j)−μk,j)2)- μ k , j \mu_{k,j} μk,j:类别 c k c_k ck 下第 j j j 个特征的均值。
- σ k , j \sigma_{k,j} σk,j:类别 c k c_k ck 下第 j j j 个特征的标准差。
2. 多项式朴素贝叶斯
- 用于离散型数据,例如文本分类。
- 条件概率计算公式:
P ( X ( j ) ∣ c k ) = 类别 c k 中特征 X ( j ) 的出现次数 + 1 类别 c k 中所有特征的总出现次数 + 特征总数 P(X^{(j)}|c_k) = \frac{\text{类别 $c_k$ 中特征 $X^{(j)}$ 的出现次数 + 1}}{\text{类别 $c_k$ 中所有特征的总出现次数 + 特征总数}} P(X(j)∣ck)=类别 ck 中所有特征的总出现次数 + 特征总数类别 ck 中特征 X(j) 的出现次数 + 1- 这里通常使用拉普拉斯平滑,避免特征出现次数为 0 导致概率为 0。
3. 伯努利朴素贝叶斯
- 用于二元数据,适用于表示“特征是否出现”的数据集。
- 条件概率计算公式:
P ( X ( j ) ∣ c k ) = 类别 c k 中特征 X ( j ) 出现的概率 P(X^{(j)}|c_k) = \text{类别 $c_k$ 中特征 $X^{(j)}$ 出现的概率} P(X(j)∣ck)=类别 ck 中特征 X(j) 出现的概率
4. 朴素贝叶斯的优点与局限性
优点
- 简单易实现:基于贝叶斯定理,计算简单,容易实现。
- 计算高效:条件独立性假设大大降低了计算复杂度。
- 适合高维数据:在文本分类等任务中表现良好,特别是高维稀疏数据。
- 鲁棒性好:即使条件独立性假设不完全成立,分类性能仍然良好。
局限性
- 条件独立性假设:
- 特征完全独立的假设在实际数据中很少成立,可能影响分类性能。
- 数据分布限制:
- 高斯朴素贝叶斯假设数据服从正态分布,不适合其他分布的数据。
- 处理稀有事件问题:
- 如果某些类别的特征从未出现在训练数据中,会导致条件概率为 0。拉普拉斯平滑可以缓解此问题。
5. 一个实际例子
问题描述
假设我们有以下训练数据:
特征 X 1 X_1 X1 | 特征 X 2 X_2 X2 | 类别 Y Y Y |
---|---|---|
晴天 | 炎热 | 是 |
阴天 | 炎热 | 否 |
雨天 | 凉爽 | 是 |
晴天 | 凉爽 | 是 |
我们需要预测一个新样本 X = ( 晴天 , 炎热 ) X = (\text{晴天}, \text{炎热}) X=(晴天,炎热) 的类别 Y Y Y。
步骤
-
计算先验概率:
P ( Y = 是 ) = 3 4 , P ( Y = 否 ) = 1 4 P(Y=\text{是}) = \frac{3}{4}, \quad P(Y=\text{否}) = \frac{1}{4} P(Y=是)=43,P(Y=否)=41 -
计算条件概率:
P ( X 1 = 晴天 ∣ Y = 是 ) = 2 3 , P ( X 1 = 晴天 ∣ Y = 否 ) = 0 P(X_1=\text{晴天}|Y=\text{是}) = \frac{2}{3}, \quad P(X_1=\text{晴天}|Y=\text{否}) = 0 P(X1=晴天∣Y=是)=32,P(X1=晴天∣Y=否)=0
P ( X 2 = 炎热 ∣ Y = 是 ) = 1 3 , P ( X 2 = 炎热 ∣ Y = 否 ) = 1 P(X_2=\text{炎热}|Y=\text{是}) = \frac{1}{3}, \quad P(X_2=\text{炎热}|Y=\text{否}) = 1 P(X2=炎热∣Y=是)=31,P(X2=炎热∣Y=否)=1 -
计算后验概率:
P ( Y = 是 ∣ X ) ∝ P ( Y = 是 ) ⋅ P ( X 1 ∣ Y = 是 ) ⋅ P ( X 2 ∣ Y = 是 ) P(Y=\text{是}|X) \propto P(Y=\text{是}) \cdot P(X_1|Y=\text{是}) \cdot P(X_2|Y=\text{是}) P(Y=是∣X)∝P(Y=是)⋅P(X1∣Y=是)⋅P(X2∣Y=是)
P ( Y = 是 ∣ X ) ∝ 3 4 ⋅ 2 3 ⋅ 1 3 = 2 12 P(Y=\text{是}|X) \propto \frac{3}{4} \cdot \frac{2}{3} \cdot \frac{1}{3} = \frac{2}{12} P(Y=是∣X)∝43⋅32⋅31=122
P ( Y = 否 ∣ X ) ∝ P ( Y = 否 ) ⋅ P ( X 1 ∣ Y = 否 ) ⋅ P ( X 2 ∣ Y = 否 ) P(Y=\text{否}|X) \propto P(Y=\text{否}) \cdot P(X_1|Y=\text{否}) \cdot P(X_2|Y=\text{否}) P(Y=否∣X)∝P(Y=否)⋅P(X1∣Y=否)⋅P(X2∣Y=否)
P ( Y = 否 ∣ X ) ∝ 1 4 ⋅ 0 ⋅ 1 = 0 P(Y=\text{否}|X) \propto \frac{1}{4} \cdot 0 \cdot 1 = 0 P(Y=否∣X)∝41⋅0⋅1=0 -
结果:
最大后验概率对应的类别是 Y = 是 Y=\text{是} Y=是。
6. 总结
朴素贝叶斯是一个简单高效的分类算法,基于贝叶斯定理和特征条件独立性假设。尽管条件独立性假设可能不完全成立,但在许多实际场景(如文本分类、垃圾邮件检测等)中表现良好,是机器学习中的经典算法之一。