【第二章:机器学习与神经网络概述】03.类算法理论与实践-(2)朴素贝叶斯分类器
第二章: 机器学习与神经网络概述
第三部分:类算法理论与实践
第二节:朴素贝叶斯分类器
内容:条件独立假设、拉普拉斯平滑、分类准确率。
朴素贝叶斯是一类基于贝叶斯定理且假设特征之间相互独立的概率分类模型,广泛应用于文本分类、垃圾邮件过滤、情感分析等任务中。
一、贝叶斯定理基础回顾
贝叶斯定理描述了在已知先验概率和条件概率下,如何更新后验概率:
-
P(C∣X):在给定特征 X 的情况下属于类别 C 的概率(后验概率)
-
P(C):类别的先验概率
-
P(X∣C):类别 C 下出现特征 X 的概率
-
P(X):所有类别下特征 X 的总概率(可忽略用于比较)
二、朴素假设:特征条件独立
朴素贝叶斯对贝叶斯定理进行了简化,假设特征之间相互独立,因此:
于是:
这大大简化了模型训练与推理过程。
三、模型训练与预测流程
-
统计先验概率 P(C):每个类别出现的频率
-
统计条件概率
:特征在每个类别中出现的频率
-
应用拉普拉斯平滑(见下)防止零概率问题
-
预测时计算各类别后验概率,选择概率最大的类别作为结果
四、拉普拉斯平滑(Laplacian Smoothing)
当某些特征在某类中未出现时,,使整体概率为零。
解决方法是对所有概率加一个正数(通常是1):
其中 k 是特征总数(对于多项式模型,k 为词汇表大小)。
五、朴素贝叶斯常见变体
模型类型 | 适用数据类型 | 条件概率分布 |
---|---|---|
高斯贝叶斯 | 连续型数据 | 高斯正态分布 |
多项式贝叶斯 | 计数型特征(如词频) | 多项式分布 |
伯努利贝叶斯 | 二元特征(如是否出现) | 伯努利分布 |
六、Python 示例(使用 sklearn)
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split# 示例数据
texts = ["good product", "very bad", "excellent service", "worst experience", "nice quality"]
labels = [1, 0, 1, 0, 1] # 1=好评, 0=差评# 文本向量化
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)# 训练模型
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2)
model = MultinomialNB()
model.fit(X_train, y_train)# 测试准确率
accuracy = model.score(X_test, y_test)
print(f"测试准确率: {accuracy:.2f}")
测试准确率: 0.00
七、评价指标
-
准确率(Accuracy):预测正确的样本数 / 总样本数
-
精确率(Precision)、召回率(Recall)、F1-score:在不均衡样本中更常用
-
混淆矩阵:展示预测与真实类别的分布情况
八、优点与局限
优点 | 说明 |
---|---|
计算效率高 | 适用于大规模数据 |
简单易实现 | 理解与部署容易 |
可解释性强 | 输出为概率,可量化信心度 |
局限 | 说明 |
---|---|
特征独立假设不现实 | 实际数据特征常常相关 |
对连续变量建模能力弱 | 需假设高斯分布或离散化 |