五、生成式分类器
生成式分类器是分类模型的两大分支之一,核心是先学习数据的概率分布,再基于分布进行分类。与之相对的是判别式分类器,两者的思路差异是理解分类模型的关键。
5.1 生成式分类器 vs 判别式分类器
核心思想对比
| 类别 | 核心思想 | 学习目标 | 通俗例子 | ||
|---|---|---|---|---|---|
| 判别式分类器 | 直接学习类别和特征之间的决策边界,即直接建模 $P (Y | X)(给定特征 X,样本属于类别 Y$ 的概率) | 找到不同类别之间的最优分类线 / 超平面 | 老师直接告诉你:"如果一个动物有羽毛、会飞,那它是鸟;如果有毛、会跑,那它是哺乳动物"------ 直接划分类别边界 | |
| 生成式分类器 | 先学习每个类别的数据分布 $P(X | Y)(给定类别 Y,特征 X的概率分布),再结合**先验概率**P(Y),用贝叶斯公式计算 P(Y | X)$ | 建模 "不同类别样本长什么样",再通过概率比较分类 | 老师先告诉你:"鸟的特征是:有羽毛(概率 99%)、会飞(概率 90%)、卵生(概率 100%);哺乳动物的特征是:有毛(99%)、胎生(100%)、会跑(95%)"------ 先学各类别特征分布,再判断新样本属于哪类 |
典型模型归类
| 判别式分类器 | 生成式分类器 |
|---|---|
| 逻辑回归(Logistic 回归) | 朴素贝叶斯分类器 |
| 支持向量机(SVM) | 高斯判别分析(GDA) |
| 决策树 / 随机森林 | 隐马尔可夫模型(HMM) |
| 神经网络 | 贝叶斯网络 |
关键区别总结
- 建模对象不同
- 判别式:建模 P(Y∣X) → 直接求 "特征→类别" 的映射;
- 生成式:建模 P(X∣Y) 和 P(Y) → 先求 "类别→特征" 的生成规律,再反推类别。
- 训练数据需求不同
- 生成式:对小样本数据更友好,因为概率分布可以通过先验知识补充;
- 判别式:通常需要更多样本,才能学到稳定的决策边界。
- 泛化能力不同
- 生成式:更依赖数据分布假设(比如朴素贝叶斯假设特征独立),假设不成立时性能下降;
- 判别式:不依赖分布假设,直接关注边界,很多场景下泛化能力更强。
5.2 贝叶斯规则(生成式分类器的数学基础)
贝叶斯公式是生成式分类器的核心,所有生成式模型都基于这个公式推导。
5.2.1 贝叶斯公式与核心概念
1. 贝叶斯公式
P(Y∣X)=P(X)P(X∣Y)P(Y)
- 核心目的:通过已知的 P(X∣Y) 和 P(Y),计算我们需要的 P(Y∣X)(用于分类的后验概率)。
2. 公式中各概率的定义
| 概率名称 | 定义 | 通俗解释 | ||
|---|---|---|---|---|
| P(Y) | 先验概率 | 不看特征 X 时,类别 Y 出现的概率,是 "经验常识"。例子:人群中 "患流感"(Y=1)的概率是 5%,P(Y=1)=0.05;"不患流感"(Y=0)的概率是 95%,P(Y=0)=0.95 | ||
| $P(X | Y)$ | 类条件概率 | 已知类别 Y 时,特征 X 出现的概率,即 "该类样本的特征分布"。例子:已知患流感(Y=1),特征 "发烧"(X=1)的概率是 90%,$P (X=1 | Y=1)=0.9$ |
| P(X) | 证据因子 | 特征 X 出现的总概率,对所有类别是相同的常数(分类时可忽略)。公式:$P (X)=\sum_{Y} P (X | Y) P (Y)$(全概率公式) | |
| $P(Y | X)$ | 后验概率 | 已知特征 X 时,类别 Y 出现的概率,是分类的依据。例子:已知某人发烧(X=1),他患流感的概率是 $P (Y=1 | X=1)$,这个值越大,越可能是正类 |
3. 分类规则
对新样本 X,计算它属于每个类别的后验概率 P(Y=k∣X),取概率最大的类别作为预测结果:Y^=argmaxkP(Y=k∣X)=argmaxkP(X)P(X∣Y=k)P(Y=k)因为 P(X) 对所有类别相同,所以可以简化为:Y^=argmaxkP(X∣Y=k)P(Y=k)
5.2.2 朴素贝叶斯分类器的思想
朴素贝叶斯(Naive Bayes, NB)是最经典的生成式分类器,"朴素" 二字的来源是它的一个强假设。
1. 核心假设:特征条件独立性
假设在给定类别 Y 的情况下,所有特征之间相互独立。
- 数学表达:对样本的 d 个特征 X1,X2,...,Xd,有P(X∣Y)=P(X1,X2,...,Xd∣Y)=P(X1∣Y)×P(X2∣Y)×...×P(Xd∣Y)
- 通俗解释:已知样本属于某一类时,它的各个特征之间没有关联。比如 "患流感" 类别中,"发烧" 和 "咳嗽" 是独立的,不会因为发烧就一定咳嗽。
- 为什么叫 "朴素":这个假设在现实中很少成立(比如发烧和咳嗽往往相关),但它极大简化了计算,且实际效果很好。
2. 朴素贝叶斯的分类逻辑
结合贝叶斯公式和特征独立性假设,后验概率可以拆分为:P(Y=k∣X)∝P(Y=k)×∏i=1dP(Xi∣Y=k)
- 预测时,计算每个类别的 P(Y=k)×∏P(Xi∣Y=k),取最大值对应的类别。
5.2.3 朴素贝叶斯分类器的训练(计算方法)
朴素贝叶斯的 "训练" 本质就是统计计算 3 个概率值:先验概率 P(Y)、类条件概率 P(Xi∣Y),步骤如下(以二分类、离散特征为例)。
训练数据集假设
假设有 m 个样本,每个样本有 d 个离散特征 X1,X2,...,Xd,类别标签 Y∈{0,1}。
- 记:m0 = 类别 0 的样本数,m1 = 类别 1 的样本数,m0+m1=m。
步骤 1:计算先验概率 P(Y=k)
直接统计各类别样本占比:P(Y=0)=mm0,P(Y=1)=mm1
- 例子:100 个样本,30 个正类(Y=1),70 个负类(Y=0)→ P(Y=1)=0.3,P(Y=0)=0.7。
步骤 2:计算类条件概率 P(Xi=x∣Y=k)
对每个特征 Xi 的每个取值 x,统计在类别 k 中,特征 Xi 取 x 的样本数。P(Xi=x∣Y=k)=mk类别k中Xi=x的样本数
关键优化:拉普拉斯平滑(避免概率为 0)
如果某个特征取值在某类别中从未出现过,会导致 P(Xi=x∣Y=k)=0,进而让整个后验概率为 0,这显然不合理。拉普拉斯平滑:给分子加 1,分母加该特征的取值数 ni(离散特征的不同取值个数)。P(Xi=x∣Y=k)=mk+ni类别k中Xi=x的样本数+1
- 例子:特征 X1 是 "发烧",取值为 {是,否}(n1=2);类别 1(流感)有 30 个样本,其中 "发烧 = 是" 的有 28 个,"发烧 = 否" 的有 2 个。
- 无平滑:是,否;
- 若类别 1 中没有 "发烧 = 否" 的样本(28 个是,0 个否):无平滑:否;拉普拉斯平滑:否。
步骤 3:预测新样本
对新样本 X=(x1,x2,...,xd),计算:Score(k)=P(Y=k)×∏i=1dP(Xi=xi∣Y=k)取 Score(k) 最大的 k 作为预测类别 Y^。
计算实例(垃圾邮件分类)
- 任务:判断邮件是否为垃圾邮件(Y=1:垃圾,Y=0:正常);
- 特征:X1= 是否含 "优惠",X2= 是否含 "发票";
- 训练数据 :100 封邮件,60 封垃圾(m1=60),40 封正常(m0=40)。
- 垃圾邮件中:是 有 50 封,是 有 40 封;
- 正常邮件中:是 有 5 封,是 有 35 封。
- 先验概率:P(Y=1)=0.6,P(Y=0)=0.4;
- 类条件概率(无平滑):
- 是,是;
- 是,是;
- 新样本:是是(含 "优惠" 和 "发票"):
- Score(1)=0.6×6050×6040≈0.6×0.833×0.667≈0.333;
- Score(0)=0.4×405×4035=0.4×0.125×0.875=0.04375;
- 预测:Score(1)>Score(0) → 该邮件是垃圾邮件。
生成式 vs 判别式分类器 + 朴素贝叶斯计算速记表
一、生成式分类器 vs 判别式分类器 核心对比
| 对比维度 | 生成式分类器 | 判别式分类器 | |||
|---|---|---|---|---|---|
| 核心思想 | 先学 "各类别数据的分布",再推导样本属于某类的概率 | 直接学 "特征到类别的决策边界",不关心数据分布 | |||
| 建模目标 | 建模 $P (X | Y)(类条件概率) + P(Y)(先验概率),再用贝叶斯公式求 P(Y | X)$ | 直接建模 $P (Y | X)$(后验概率)或直接找分类边界 |
| 关键公式 | $P(Y | X)=\frac{P(X | Y)P(Y)}{P(X)}$ | 如逻辑回归:y^=σ(WTX);SVM:找最大间隔超平面 | |
| 典型模型 | 朴素贝叶斯、高斯判别分析(GDA)、隐马尔可夫模型 | 逻辑回归、SVM、决策树 / 随机森林、神经网络 | |||
| 数据需求 | 对小样本友好,可结合先验知识 | 需要更多样本,才能学到稳定的决策边界 | |||
| 核心假设 | 有强假设(如朴素贝叶斯的特征条件独立) | 无严格分布假设,关注分类边界 | |||
| 泛化能力 | 假设成立时效果好,假设不成立时性能下降 | 多数场景下泛化能力更强,适用性更广 | |||
| 通俗例子 | 先背 "鸟 = 羽毛 + 会飞""哺乳动物 = 有毛 + 胎生",再判断动物类别 | 直接记 "有羽毛→鸟,有毛→哺乳动物" 的分类规则 |
二、朴素贝叶斯分类器 核心知识点
1. 核心假设
特征条件独立性:给定类别 Y 时,所有特征 X1,X2,...,Xd 相互独立,即P(X∣Y)=P(X1,X2,...,Xd∣Y)=∏i=1dP(Xi∣Y)
2. 分类规则
对新样本 X,计算各类别得分,取得分最高的类别:Y^=argmaxk[P(Y=k)×∏i=1dP(Xi∣Y=k)](注:P(X) 对所有类别相同,可忽略)
3. 训练计算步骤(离散特征 + 二分类)
| 步骤 | 计算目标 | 公式 | 关键说明 | ||
|---|---|---|---|---|---|
| 1 | 计算先验概率 P(Y=k) | P(Y=k)=mmk mk:类别k的样本数 m:总样本数 | 直接统计各类别样本占比 | ||
| 2 | 计算类条件概率 $P (X_i=x | Y=k)$(无平滑) | $P(X_i=x | Y=k)=\frac {\text {类别} k\text {中} X_i=x\text {的样本数}}{m_k}$ | 若某特征取值在类别k中无样本,概率为 0,会导致分类失效 |
| 3 | 类条件概率优化(拉普拉斯平滑) | $P(X_i=x | Y=k)=\frac {\text {类别} k\text {中} X_i=x\text {的样本数}+1}{m_k + n_i}<br>n_i:特征X_i$ 的取值个数 | 避免概率为 0,提升模型稳定性 | |
| 4 | 新样本预测 | 计算各类别得分: $Score(k)=P(Y=k) \times \prod_{i=1}^d P(X_i=x_i | Y=k)$ | 得分最高的类别即为预测结果 |
4. 计算实例(垃圾邮件分类)
| 已知条件 | 数值 |
|---|---|
| 总样本数 m | 100 封邮件 |
| 垃圾邮件数 m1(Y=1) | 60 |
| 正常邮件数 m0(Y=0) | 40 |
| 垃圾邮件中含 "优惠"(是)的数量 | 50 |
| 正常邮件中含 "优惠"(是)的数量 | 5 |
| 垃圾邮件中含 "发票"(是)的数量 | 40 |
| 正常邮件中含 "发票"(是)的数量 | 35 |
| 计算环节 | 公式代入 | 结果 |
|---|---|---|
| 先验概率 | P(Y=1)=10060=0.6 P(Y=0)=10040=0.4 | P(Y=1)=0.6 P(Y=0)=0.4 |
| 类条件概率(无平滑) | 是 是 是 是 | - |
| 新样本 是是 得分 | Score(1)=0.6×0.833×0.667≈0.333 Score(0)=0.4×0.125×0.875=0.04375 | Score(1)>Score(0) → |