人工智能专业课 机器学习(4)—— 生成式分类器
本文依照《机器学习从原理到应用》(卿来云、黄庆明编著,人民邮电出版社,2020 年第一版)的目录顺序整理,为系列的第四篇,覆盖非线性模型中的生成式分类器部分。本章的数学工具是概率论,核心线索是"用贝叶斯公式把分类问题转化为后验概率的比较"。
〇、本章知识地图
判别式 vs 生成式:分类模型的两大建模范式
→ 贝叶斯公式与贝叶斯决策(最小错误率准则)
→ 参数估计:极大似然估计(MLE)
→ 朴素贝叶斯:条件独立假设 → 训练与预测 → 拉普拉斯平滑 → 文本分类实例
→ 扩展:高斯(判别)模型
一、判别式模型 vs 生成式模型(范式对比)
这是本章的纲,也是高频概念题。
| 判别式模型 | 生成式模型 | |
|---|---|---|
| 建模对象 | 直接学习 |
学习联合分布 |
| 关注点 | "两类之间怎么分" | "每一类长什么样" |
| 代表算法 | Logistic 回归、SVM、决策树、神经网络 | 朴素贝叶斯、高斯判别分析、隐马尔可夫模型 |
| 对数据量的需求 | 相对较大 | 相对较小(先验假设分担了数据压力) |
| 生成新样本 | 不能 | 可以 |
记忆要点:判别式直接学"分界",生成式先学"分布"再反推分类。

二、贝叶斯公式与贝叶斯决策
2.1 三个概率概念(先理清再做题)
- 先验概率
:看到样本之前,各类别出现的概率;
- 似然(类条件概率)
:在类别
下观察到特征
的概率;
- 后验概率
:观察到
之后,它属于类别
的概率。
贝叶斯公式将三者联系起来:

直觉:后验 ∝ 似然 × 先验。证据 与类别无关,比较类别时只需比较分子。

2.2 贝叶斯决策(最小错误率准则)
选择使后验概率最大的类别:
![]()
贝叶斯最优分类器:在所有基于同一数据的分类器中,按此准则决策的错误率理论上最小,称为贝叶斯错误率——它是任何分类器都无法超越的下限。这是重要的概念考点:贝叶斯决策给出的是理论上限,实际分类器与其差距来源于分布估计的误差。
三、参数估计:极大似然估计(MLE)
要用贝叶斯决策,先得知道 与
,它们从训练数据中估计。最经典的准则是极大似然估计:

思想一句话:让"已发生的数据"出现概率最大的参数,就是最好的参数。 实践中取对数(连乘变连加,防止下溢),再求导令其为零。
考试常考结论(均为 MLE 结果,会推更好):
- 类别先验:

- 高斯分布参数:均值 = 样本均值,方差 = 样本方差。
四、朴素贝叶斯分类器
4.1 条件独立假设
直接估计联合似然 面临维数灾难:
个特征的组合数随维度指数增长。朴素贝叶斯引入条件独立假设——给定类别
时,各特征相互独立:

于是决策规则变为:

"朴素"一词正源于这个看似天真的假设。假设在现实中几乎不成立,但实践效果常常很好——原因是分类只需要各类得分排序正确,概率估计的系统性偏差在各类间被部分抵消。

4.2 拉普拉斯平滑
若某特征取值在训练集中从未与类别 共现,则
,连乘后整个后验归零,其他特征的信息全部被抹掉。解决方法:拉普拉斯平滑——每个取值的计数加 1(一般化则为加
):

其中 为特征
的取值个数。平滑是简答题常客:"为什么需要平滑?——防止未出现的特征取值使概率连乘归零。"

4.3 数值技巧:对数化
大量概率连乘会导致浮点下溢,实际计算一律取对数,连乘变连加:

4.4 应用实例:文本分类
朴素贝叶斯最成功的应用是文本分类(垃圾邮件过滤为经典考题场景):
- 特征 = 单词(是否出现 / 出现次数),类别 = 垃圾邮件 / 正常邮件;
- 训练 = 统计各类下每个单词的条件概率 + 类别先验;
- 预测 = 代入公式取对数连加比较。
优点在该场景被放大:特征维度极高(数万词)而朴素贝叶斯训练只需一次计数扫描,速度极快。

五、扩展:连续特征与高斯模型
特征为连续值时,常用做法:假设各类下特征服从高斯分布 ,参数用 MLE(样本均值/方差)估计,其余流程与朴素贝叶斯一致,即高斯朴素贝叶斯。若进一步考虑特征间相关性(完整协方差矩阵),则得到高斯判别分析(GDA):
- 各类共享协方差矩阵 → 决策边界为线性(即 LDA);
- 各类独立协方差矩阵 → 决策边界为二次(即 QDA)。

六、朴素贝叶斯优缺点
| 优点 | 缺点 |
|---|---|
| 训练与预测速度极快(一次扫描) | 条件独立假设常不成立 |
| 小样本、高维数据下表现稳健 | 概率输出不准(排序可用,数值不可信) |
| 天然支持增量学习 | 对输入特征的表达方式较敏感 |
| 可解释性好 | 相关特征较多时性能下降明显 |
附:代码实践(动手 10 分钟)
片段 1:高斯朴素贝叶斯(连续特征)——对应第五节。
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
clf = GaussianNB()
clf.fit(X_train, y_train)
print("测试准确率:", round(clf.score(X_test, y_test), 3))
print("某一样本的各类后验概率:", clf.predict_proba(X_test[:1]).round(3))
predict_proba 输出即贝叶斯公式算出的后验概率(已归一化),与 2.2 节的决策规则对应。
片段 2:多项式朴素贝叶斯做文本分类——对应 4.4 节,完整走一遍"计数 → 训练 → 预测"流程。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
texts = ["win money now", "cheap price buy now", "win prize free",
"meeting at noon", "project schedule review", "lunch together tomorrow"]
labels = [1, 1, 1, 0, 0, 0] # 1=垃圾邮件 0=正常邮件
vec = CountVectorizer() # 文本 → 词频特征(每个单词是一个特征)
X = vec.fit_transform(texts)
clf = MultinomialNB(alpha=1.0) # alpha 即 4.2 节的平滑参数
clf.fit(X, labels)
test = vec.transform(["free prize win"])
print("预测类别:", clf.predict(test)[0])
print("后验概率:", clf.predict_proba(test).round(3))
两个对应关系:alpha=1.0 就是拉普拉斯平滑;CountVectorizer 把每个单词当作一个特征,正是条件独立假设作用的对象。MultinomialNB 适用于词频计数特征;若特征只表示"单词是否出现",应改用 BernoulliNB。
七、本章自测题
- 从建模对象、代表算法、数据需求三方面比较判别式模型与生成式模型。
- 写出贝叶斯公式,并说明先验、似然、后验三者的含义。
- 什么是贝叶斯最优分类器?什么是贝叶斯错误率?
- 写出朴素贝叶斯的决策规则,并解释"朴素"的含义。
- 条件独立假设几乎总不成立,为什么朴素贝叶斯仍常有良好效果?
- 什么是拉普拉斯平滑?解决什么问题?
- 为什么实际计算朴素贝叶斯时要取对数?
- 以垃圾邮件过滤为例,说明朴素贝叶斯分类的完整流程。
- 高斯判别分析中,共享协方差与独立协方差分别得到什么样的决策边界?
八、复习建议
- 本章一条主线:贝叶斯公式 → 后验最大化 → 条件独立假设 → 连乘(对数连加),顺着主线复述即可覆盖 80% 考点;
- 两个"为什么"必背:为什么需要平滑、为什么取对数;
- 与前几章建立联系:Logistic 回归(判别式)与朴素贝叶斯(生成式)处理同一问题,是比较题的固定搭配。
更多推荐



所有评论(0)