朴素贝叶斯(Naive Bayes)完整解析:概率论经典算法
1️⃣ 什么是朴素贝叶斯?
朴素贝叶斯(Naive Bayes,NB)是一类基于贝叶斯定理(Bayes Theorem)与条件独立假设的分类算法。
核心思想:
通过计算样本属于不同类别的后验概率,选择概率最大的类别作为预测结果。
NB 适合文本分类、垃圾邮件识别等场景,是经典的概率生成模型。
2️⃣ 核心思想与贝叶斯公式
贝叶斯定理
对于一个类别 和特征向量
:
:先验概率
:似然概率
:后验概率
:样本出现的概率
NB 算法选择最大后验概率类别:
3️⃣ 条件独立假设(朴素性)
特征条件独立:
简化了多维联合概率的计算
实际上特征往往并不完全独立,但在多数任务中效果依然良好
最终分类公式:
4️⃣ 数学公式推导(平滑处理)
实际问题中,某些特征条件概率可能为 0,导致整体概率为 0。
解决方案:拉普拉斯平滑(Laplace Smoothing)
:类别
中特征
出现的次数
:类别
中样本总数
:特征取值个数
:平滑系数(默认
)
5️⃣ 常见变体
多项式朴素贝叶斯(Multinomial NB)
常用于文本分类(词频)
高斯朴素贝叶斯(Gaussian NB)
特征服从高斯分布时适用
伯努利朴素贝叶斯(Bernoulli NB)
特征为二元(0/1)时使用
6️⃣ 优缺点总结
✅ 优点
理论简单、计算高效
对小数据集效果好
可处理多分类问题
对缺失数据不敏感
❌ 缺点
条件独立假设过于强,特征相关时效果差
对连续特征需做分布假设
无法捕捉特征之间的交互
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 是基于概率的生成模型,核心是 贝叶斯公式 + 条件独立假设
对特征维度高(如文本)的任务非常高效
缺点是条件独立假设过强,但实践中效果依旧稳定