朴素贝叶斯(Naive Bayes)完整解析:概率论经典算法

发布于:2025-08-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

1️⃣ 什么是朴素贝叶斯?

朴素贝叶斯(Naive Bayes,NB)是一类基于贝叶斯定理(Bayes Theorem)条件独立假设的分类算法。

核心思想:

通过计算样本属于不同类别的后验概率,选择概率最大的类别作为预测结果。

NB 适合文本分类、垃圾邮件识别等场景,是经典的概率生成模型。

2️⃣ 核心思想与贝叶斯公式

贝叶斯定理

对于一个类别 C_k 和特征向量 X = (x_1, x_2, \dots, x_n)

P(C_k|X) = \frac{P(X|C_k)P(C_k)}{P(X)}

  • P(C_k):先验概率

  • P(X|C_k):似然概率

  • P(C_k|X):后验概率

  • P(X):样本出现的概率

NB 算法选择最大后验概率类别:

\hat{y} = \arg\max_{C_k} P(C_k|X) 

3️⃣ 条件独立假设(朴素性)

特征条件独立:

P(X|C_k) = \prod_{i=1}^n P(x_i|C_k) 

  • 简化了多维联合概率的计算

  • 实际上特征往往并不完全独立,但在多数任务中效果依然良好

最终分类公式: 

\hat{y} = \arg\max_{C_k} P(C_k) \prod_{i=1}^n P(x_i|C_k) 

4️⃣ 数学公式推导(平滑处理)

实际问题中,某些特征条件概率可能为 0,导致整体概率为 0。

解决方案:拉普拉斯平滑(Laplace Smoothing)

P(x_i|C_k) = \frac{N_{x_i, C_k} + \alpha}{N_{C_k} + \alpha m} 

  • N_{xi,Ck}​​:类别 C_k​ 中特征 x_i 出现的次数

  • N_{C_k}:类别 C_k中样本总数

  • m:特征取值个数

  • \alpha > 0:平滑系数(默认 \alpha=1

5️⃣ 常见变体

  1. 多项式朴素贝叶斯(Multinomial NB)

    • 常用于文本分类(词频)

  2. 高斯朴素贝叶斯(Gaussian NB)

    • 特征服从高斯分布时适用

  3. 伯努利朴素贝叶斯(Bernoulli NB)

    • 特征为二元(0/1)时使用

6️⃣ 优缺点总结

✅ 优点

  1. 理论简单、计算高效

  2. 对小数据集效果好

  3. 可处理多分类问题

  4. 对缺失数据不敏感

❌ 缺点

  1. 条件独立假设过于强,特征相关时效果差

  2. 对连续特征需做分布假设

  3. 无法捕捉特征之间的交互

7️⃣ Python 实现(sklearn)

文本分类示例

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score

# 加载文本数据
data_train = fetch_20newsgroups(subset='train', remove=('headers', 'footers', 'quotes'))
data_test = fetch_20newsgroups(subset='test', remove=('headers', 'footers', 'quotes'))

# 特征提取(词频)
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(data_train.data)
X_test = vectorizer.transform(data_test.data)

# 多项式朴素贝叶斯模型
nb_clf = MultinomialNB(alpha=1.0)
nb_clf.fit(X_train, data_train.target)

# 预测与评估
y_pred = nb_clf.predict(X_test)
print("测试集精度:", accuracy_score(data_test.target, y_pred))

8️⃣ 应用场景

  • 文本分类:垃圾邮件检测、新闻分类

  • 情感分析:正负面评论判断

  • 医疗诊断(概率模型)

  • 适合特征维度高、样本量大的离散特征数据集

📚 总结

  • Naive Bayes 是基于概率的生成模型,核心是 贝叶斯公式 + 条件独立假设

  • 对特征维度高(如文本)的任务非常高效

  • 缺点是条件独立假设过强,但实践中效果依旧稳定


网站公告

今日签到

点亮在社区的每一天
去签到