07_朴素贝叶斯
文章目录
- 1 概述
- 1.1 贝叶斯定理
- 1.2 朴素贝叶斯
- 2 算法流程
- 2.1 训练阶段
- 2.2 预测阶段
- 3 API 使用
- 4 算法优缺点
1 概述
1.1 贝叶斯定理
贝叶斯定理是概率论中的一个重要定理,它描述了如何从主观经验或已知事实出发,通过收集到的样本数据(证据)来更新对事件发生概率的认知(信念)。贝叶斯定理的数学表达式为:
P ( A ∣ B ) = P ( B ∣ A ) P ( B ) ⋅ P ( A ) P(A \mid B) = \frac{P(B \mid A)}{P(B)} \cdot P(A) P(A∣B)=P(B)P(B∣A)⋅P(A)
- P ( A ) {P(A)} P(A) 是事件 A {A} A 发生的先验概率,我们可以理解为已知事实或主观经验(主观概率)
- P ( B ∣ A ) {P(B \mid A)} P(B∣A) 是在事件 A {A} A 发生的条件下事件 B {B} B 发生的条件概率,通常也称之为似然性(likelihood)
- P ( B ) {P(B)} P(B) 是事件 B {B} B 发生的(全)概率,和 P ( B ∣ A ) {P(B \mid A)} P(B∣A) 可以通过收集到的样本数据(证据)获取
- P ( A ∣ B ) {P(A \mid B)} P(A∣B) 是在事件 B {B} B 发生的条件下事件 A {A} A 发生的条件概率,即收集到样本数据后对事件 A {A} A 发生概率的重新认知,称之为后验概率。
贝叶斯定理告诉我们一个重要的事实:可以从已知的事实或主观经验出发,通过收集到的证据来更新我们对某个事件发生概率的认知,也就是可以通过已知的事实和收集的证据来推断出未知的真相。
1.2 朴素贝叶斯
朴素贝叶斯算法是基于贝叶斯定理和特征条件独立性假设的分类算法,因其简单高效而受到广泛应用。朴素贝叶斯算法的关键在于“朴素”二字,也就是刚才所说的特征条件独立性假设,即用于分类的特征在类确定的条件下都是独立的,该假设使得朴素贝叶斯的学习成为可能。
假设我们有一个特征集合 X = { x 1 , x 2 , … , x n } {X = \{x_1, x_2, \ldots, x_n\}} X={x1,x2,…,xn} 和一个类别 C {C} C ,朴素贝叶斯算法假设:
P ( X ∣ C ) = P ( x 1 ∣ C ) ⋅ P ( x 2 ∣ C ) ⋅ … ⋅ P ( x n ∣ C ) P(X \vert C) = P(x_1 \vert C) \cdot P(x_2 \vert C) \cdot \ldots \cdot P(x_n \vert C) P(X∣C)=P(x1∣C)⋅P(x2∣C)⋅…⋅P(xn∣C)
这个假设使得我们无需考虑特征之间复杂的依赖关系,极大简化了条件概率的计算。
2 算法流程
2.1 训练阶段
首先计算每个类别的先验概率和每个特征在各个类别下的条件概率。
- 计算先验概率:
P ( C i ) = n i n P(C_{i}) = \frac{n_{i}}{n} P(Ci)=nni
C i {C_{i}} Ci 表示类别, n i {n_{i}} ni 是类别 C i {C_{i}} Ci 的样本数量, n {n} n 是总的样本容量。 - 计算条件概率:
P ( x j ∣ C i ) = n i , j n i P(x_{j} \vert C_{i}) = \frac{n_{i,j}}{n_{i}} P(xj∣Ci)=nini,j
n i , j {n_{i,j}} ni,j 是在类别 C i {C_{i}} Ci 中,特征 x j {x_{j}} xj 出现的次数。
2.2 预测阶段
给定一个待分类样本 X \small{X} X ,朴素贝叶斯算法通过以下步骤来计算其属于每个类别的后验概率:
P ( C i ∣ X ) = P ( X ∣ C i ) P ( X ) ⋅ P ( C i ) P(C_{i} \vert X) = \frac{P(X \vert C_{i})}{P(X)} \cdot P(C_{i}) P(Ci∣X)=P(X)P(X∣Ci)⋅P(Ci)
上面的公式中, P ( X ) \small{P(X)} P(X) 对应到每个类别都是一个常量,可以忽略掉它,再结合独立性假设有:
P ( C i ∣ X ) ∝ P ( C i ) ⋅ P ( x 1 ∣ C i ) ⋅ P ( x 2 ∣ C i ) ⋅ … ⋅ P ( x n ∣ C i ) P(C_{i} \vert X) \propto P(C_{i}) \cdot P(x_1 \vert C_{i}) \cdot P(x_2 \vert C_{i}) \cdot \ldots \cdot P(x_n \vert C_{i}) P(Ci∣X)∝P(Ci)⋅P(x1∣Ci)⋅P(x2∣Ci)⋅…⋅P(xn∣Ci)
然后选择具有最高后验概率的类别作为预测结果。
3 API 使用
在 sklearn.navie_bayes 模块下有五个朴素贝叶斯算法的变体,每种变体针对不同类型的数据和特征分。
| 分类器 | 特征类型 | 主要假设 |
|---|---|---|
BernoulliNB | 二元特征 | 特征服从 Bernoulli 分布 |
CategoricalNB | 类别特征 | 特征服从多项式分布,常用于处理类别数据 |
ComplementNB | 计数特征 | 利用补集概率,常用于处理不平衡数据集 |
GaussianNB | 连续特征 | 特征服从高斯分布 |
MultinomialNB | 计数特征 | 特征服从多项式分布,常用于文本分类 |
from sklearn.naive_bayes import GaussianNBmodel = GaussianNB()
model.fit(X_train, y_train)# 分类结果
y_pred = model.predict(X_test)# 分类概率,为了方便观看,保留两位小数
y_proba = model.predict_proba(X_test).round(2)
4 算法优缺点
优点:
- 逻辑简单容易实现,适合大规模数据集。
- 运算开销较小。预测需要用到的概率在训练阶段都已经准好了,当新数据来了之后,只需要获取对应的概率值并进行简单的运算就能获得预测的结果。
- 受噪声和无关属性影响小。
缺点:由于引入了“特征相互独立”这个假设,缺点也相当明显,因为在实际应用中,特征之间很难做到完全独立,尤其是维度很高的数据,如果特征之间的相关性较大,那么分类的效果就会变得很差。
为了解决朴素贝叶斯的缺点,在其基础上又衍生出了一些新的方法,包括:半朴素贝叶斯(One Dependent Estimator)、AODE(Averaged One Dependent Estimator)、K 依赖朴素贝叶斯、朴素贝叶斯网络、高斯混合朴素贝叶斯等。
