Naive Bayes、最大似然估计与最大后验估计
本文系统介绍三个紧密相关的概率统计概念:Naive Bayes、Maximum Likelihood Estimation(ML)与 Maximum A Posteriori Estimation(MAP)。它们不仅是传统机器学习的重要基础,也构成了理解概率模型、贝叶斯学习、正则化和深度学习训练目标的重要入口。
一、为什么要同时学习 Naive Bayes、ML 和 MAP
这三个概念处在同一条逻辑链上:
可以先用一句话区分:
- ML:只看数据,寻找最能解释数据的参数。
- MAP:同时看数据和先验,寻找后验概率最大的参数。
- Naive Bayes:利用类别先验和特征条件概率完成分类。
二、贝叶斯定理
贝叶斯定理描述了在观察到证据之后,如何更新对某个事件或参数的认识。
P(A∣B)=P(B∣A)P(A)P(B)P(A|B)=\\frac{P(B|A)P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)P(A)
其中:
- P(A):先验概率,即观察证据前对事件 A 的认识。
- P(B|A):似然,即事件 A 成立时观察到 B 的概率。
- P(B):证据概率,也叫边缘似然。
- P(A|B):后验概率,即观察到 B 后事件 A 的概率。
在参数估计问题中,通常写成:
P(θ∣D)=P(D∣θ)P(θ)P(D)P(\\theta|D)=\\frac{P(D|\\theta)P(\\theta)}{P(D)}P(θ∣D)=P(D)P(D∣θ)P(θ)
其中:
- θ 表示模型参数。
- D 表示训练数据。
- P(θ) 是参数先验。
- P(D|θ) 是似然函数。
- P(θ|D) 是参数后验。

贝叶斯学习的核心可以概括为:
Posterior∝Likelihood×Prior\\text{Posterior}\\propto\\text{Likelihood}\\times\\text{Prior}Posterior∝Likelihood×Prior
因为对于固定数据集 D,证据 P(D) 与参数 θ 无关,所以在优化参数时通常可以忽略它。
三、Maximum Likelihood Estimation
3.1 什么是最大似然估计
最大似然估计的目标是:
找到一组参数,使已经观察到的训练数据出现的概率最大。
设训练数据为:
D={x1,x2,…,xN}D=\\{x_1,x_2,\\ldots,x_N\\}D={x1,x2,…,xN}
模型参数为 θ。如果样本独立同分布,则整个数据集的似然为:
P(D∣θ)=∏i=1NP(xi∣θ)P(D|\\theta)=\\prod_{i=1}^{N}P(x_i|\\theta)P(D∣θ)=i=1∏NP(xi∣θ)
最大似然估计为:
θ^ML=argmaxθP(D∣θ)\\hat{\\theta}_{ML}=\\arg\\max_{\\theta}P(D|\\theta)θ^ML=argθmaxP(D∣θ)
由于连乘容易造成数值下溢,而且对数函数是单调递增函数,所以通常最大化对数似然:
θ^ML=argmaxθlogP(D∣θ)\\hat{\\theta}_{ML}=\\arg\\max_{\\theta}\\log P(D|\\theta)θ^ML=argθmaxlogP(D∣θ)
独立样本下:
logP(D∣θ)=∑i=1NlogP(xi∣θ)\\log P(D|\\theta)=\\sum_{i=1}^{N}\\log P(x_i|\\theta)logP(D∣θ)=i=1∑NlogP(xi∣θ)
因此,乘法被转换为加法,计算更加稳定。
3.2 高斯分布均值的 ML 估计
假设样本来自均值为 μ、方差为已知常数 σ² 的高斯分布:
xi∼N(μ,σ2)x_i\\sim\\mathcal{N}(\\mu,\\sigma^2)xi∼N(μ,σ2)
高斯分布密度为:
P(xi∣μ)=12πσ2exp(−(xi−μ)22σ2)P(x_i|\\mu)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left(-\\frac{(x_i-\\mu)^2}{2\\sigma^2}\\right)P(xi∣μ)=2πσ21exp(−2σ2(xi−μ)2)
所有样本的对数似然为:
logP(D∣μ)=−N2log(2πσ2)−12σ2∑i=1N(xi−μ)2\\log P(D|\\mu)=-\\frac{N}{2}\\log(2\\pi\\sigma^2)-\\frac{1}{2\\sigma^2}\\sum_{i=1}^{N}(x_i-\\mu)^2logP(D∣μ)=−2Nlog(2πσ2)−2σ21i=1∑N(xi−μ)2
前半部分与 μ 无关,因此最大化对数似然等价于最小化平方误差:
μ^ML=argminμ∑i=1N(xi−μ)2\\hat{\\mu}_{ML}=\\arg\\min_{\\mu}\\sum_{i=1}^{N}(x_i-\\mu)^2μ^ML=argμmini=1∑N(xi−μ)2
最终得到:
μ^ML=1N∑i=1Nxi\\hat{\\mu}_{ML}=\\frac{1}{N}\\sum_{i=1}^{N}x_iμ^ML=N1i=1∑Nxi
也就是说,正态分布均值的最大似然估计就是样本均值。
3.3 ML 与深度学习中的损失函数
深度学习训练通常可以解释为最大似然估计。
对于分类问题,神经网络输出类别概率:
P(y=k∣x;θ)P(y=k|x;\\theta)P(y=k∣x;θ)
整个数据集的条件似然为:
P(D∣θ)=∏i=1NP(yi∣xi;θ)P(D|\\theta)=\\prod_{i=1}^{N}P(y_i|x_i;\\theta)P(D∣θ)=i=1∏NP(yi∣xi;θ)
最大化对数似然等价于最小化负对数似然:
LNLL(θ)=−∑i=1NlogP(yi∣xi;θ)\\mathcal{L}_{NLL}(\\theta)=-\\sum_{i=1}^{N}\\log P(y_i|x_i;\\theta)LNLL(θ)=−i=1∑NlogP(yi∣xi;θ)
对于 one-hot 标签和 Softmax 输出,负对数似然就是交叉熵损失:
LCE=−∑i=1N∑k=1Kyiklogy^ik\\mathcal{L}_{CE}=-\\sum_{i=1}^{N}\\sum_{k=1}^{K}y_{ik}\\log\\hat{y}_{ik}LCE=−i=1∑Nk=1∑Kyiklogy^ik
因此,可以把普通神经网络分类训练理解为:
使用梯度下降求解模型参数的最大似然估计。
四、Maximum A Posteriori Estimation
4.1 什么是最大后验估计
最大后验估计寻找使后验概率最大的参数:
θ^MAP=argmaxθP(θ∣D)\\hat{\\theta}_{MAP}=\\arg\\max_{\\theta}P(\\theta|D)θ^MAP=argθmaxP(θ∣D)
根据贝叶斯定理:
P(θ∣D)=P(D∣θ)P(θ)P(D)P(\\theta|D)=\\frac{P(D|\\theta)P(\\theta)}{P(D)}P(θ∣D)=P(D)P(D∣θ)P(θ)
由于 P(D) 不随 θ 变化,因此:
θ^MAP=argmaxθP(D∣θ)P(θ)\\hat{\\theta}_{MAP}=\\arg\\max_{\\theta}P(D|\\theta)P(\\theta)θ^MAP=argθmaxP(D∣θ)P(θ)
取对数后:
θ^MAP=argmaxθ[logP(D∣θ)+logP(θ)]\\hat{\\theta}_{MAP}=\\arg\\max_{\\theta}\\left[\\log P(D|\\theta)+\\log P(\\theta)\\right]θ^MAP=argθmax[logP(D∣θ)+logP(θ)]
也可以写成最小化形式:
θ^MAP=argminθ[−logP(D∣θ)−logP(θ)]\\hat{\\theta}_{MAP}=\\arg\\min_{\\theta}\\left[-\\log P(D|\\theta)-\\log P(\\theta)\\right]θ^MAP=argθmin[−logP(D∣θ)−logP(θ)]
这说明 MAP 的目标由两部分构成:
4.2 ML 与 MAP 的图形对比

图中:
- 似然曲线的最高点对应 ML 估计。
- 先验表达了参数在观察数据前的偏好。
- 后验由似然与先验共同决定。
- 后验最高点对应 MAP 估计。
当数据量较少时,先验对 MAP 的影响较大。
当数据量非常大时,似然通常占主导地位,MAP 与 ML 会逐渐接近。
4.3 高斯先验与 L2 正则化
假设神经网络参数服从零均值高斯先验:
P(θ)∝exp(−λ2∥θ∥22)P(\\theta)\\propto\\exp\\left(-\\frac{\\lambda}{2}\\|\\theta\\|_2^2\\right)P(θ)∝exp(−2λ∥θ∥22)
取负对数:
−logP(θ)=λ2∥θ∥22+C-\\log P(\\theta)=\\frac{\\lambda}{2}\\|\\theta\\|_2^2+C−logP(θ)=2λ∥θ∥22+C
代入 MAP 目标:
θ^MAP=argminθ[Ldata(θ)+λ2∥θ∥22]\\hat{\\theta}_{MAP}=\\arg\\min_{\\theta}\\left[\\mathcal{L}_{data}(\\theta)+\\frac{\\lambda}{2}\\|\\theta\\|_2^2\\right]θ^MAP=argθmin[Ldata(θ)+2λ∥θ∥22]
这正是深度学习中的 L2 正则化或权重衰减形式。
因此:
L2 正则化可以解释为对模型参数施加零均值高斯先验后进行 MAP 估计。
4.4 拉普拉斯先验与 L1 正则化
若参数服从零均值拉普拉斯分布:
P(θ)∝exp(−λ∥θ∥1)P(\\theta)\\propto\\exp(-\\lambda\\|\\theta\\|_1)P(θ)∝exp(−λ∥θ∥1)
则负对数先验为:
−logP(θ)=λ∥θ∥1+C-\\log P(\\theta)=\\lambda\\|\\theta\\|_1+C−logP(θ)=λ∥θ∥1+C
MAP 目标变成:
θ^MAP=argminθ[Ldata(θ)+λ∥θ∥1]\\hat{\\theta}_{MAP}=\\arg\\min_{\\theta}\\left[\\mathcal{L}_{data}(\\theta)+\\lambda\\|\\theta\\|_1\\right]θ^MAP=argθmin[Ldata(θ)+λ∥θ∥1]
这就是 L1 正则化。
L1 正则化倾向于产生稀疏参数,因此常用于特征选择和模型压缩。
五、ML 与 MAP 的核心区别
| 优化目标 | 最大化似然 | 最大化后验 |
| 是否使用先验 | 否 | 是 |
| 数据较少时 | 容易受噪声影响 | 先验可提供约束 |
| 数据量很大时 | 通常稳定 | 往往逐渐接近 ML |
| 与正则化关系 | 通常无显式先验 | 可解释常见正则化 |
| 参数含义 | 固定但未知 | 带有概率先验的未知参数 |
二者的关系可以写成:
θ^ML=argmaxθP(D∣θ)\\hat{\\theta}_{ML}=\\arg\\max_{\\theta}P(D|\\theta)θ^ML=argθmaxP(D∣θ)
θ^MAP=argmaxθP(D∣θ)P(θ)\\hat{\\theta}_{MAP}=\\arg\\max_{\\theta}P(D|\\theta)P(\\theta)θ^MAP=argθmaxP(D∣θ)P(θ)
如果参数先验是均匀分布,则 P(θ) 对所有参数取值相同,此时:
θ^MAP=θ^ML\\hat{\\theta}_{MAP}=\\hat{\\theta}_{ML}θ^MAP=θ^ML
六、Naive Bayes
6.1 Naive Bayes 是什么
Naive Bayes 是一类基于贝叶斯定理的监督分类算法。
对于输入特征:
x=(x1,x2,…,xn)x=(x_1,x_2,\\ldots,x_n)x=(x1,x2,…,xn)
目标是计算每个类别 C_k 的后验概率:
P(Ck∣x)=P(x∣Ck)P(Ck)P(x)P(C_k|x)=\\frac{P(x|C_k)P(C_k)}{P(x)}P(Ck∣x)=P(x)P(x∣Ck)P(Ck)
因为 P(x) 对所有类别相同,所以分类时只需要比较:
P(Ck∣x)∝P(Ck)P(x∣Ck)P(C_k|x)\\propto P(C_k)P(x|C_k)P(Ck∣x)∝P(Ck)P(x∣Ck)
Naive Bayes 的“朴素”来自一个强假设:
在给定类别的条件下,各个特征相互独立。
于是:
P(x∣Ck)=∏j=1nP(xj∣Ck)P(x|C_k)=\\prod_{j=1}^{n}P(x_j|C_k)P(x∣Ck)=j=1∏nP(xj∣Ck)
最终分类规则为:
y^=argmaxCkP(Ck)∏j=1nP(xj∣Ck)\\hat{y}=\\arg\\max_{C_k}P(C_k)\\prod_{j=1}^{n}P(x_j|C_k)y^=argCkmaxP(Ck)j=1∏nP(xj∣Ck)
为了避免概率连乘下溢,实际计算通常使用对数:
y^=argmaxCk[logP(Ck)+∑j=1nlogP(xj∣Ck)]\\hat{y}=\\arg\\max_{C_k}\\left[\\log P(C_k)+\\sum_{j=1}^{n}\\log P(x_j|C_k)\\right]y^=argCkmax[logP(Ck)+j=1∑nlogP(xj∣Ck)]

6.2 为什么条件独立假设很重要
如果不做独立性假设,需要直接估计:
P(x1,x2,…,xn∣Ck)P(x_1,x_2,\\ldots,x_n|C_k)P(x1,x2,…,xn∣Ck)
当特征维度很高时,联合概率分布需要大量数据才能可靠估计。
条件独立假设将复杂联合概率拆成多个一维条件概率:
P(x1,x2,…,xn∣Ck)=∏j=1nP(xj∣Ck)P(x_1,x_2,\\ldots,x_n|C_k)=\\prod_{j=1}^{n}P(x_j|C_k)P(x1,x2,…,xn∣Ck)=j=1∏nP(xj∣Ck)
这会显著降低参数数量和计算复杂度。
虽然现实中的特征通常不完全独立,但 Naive Bayes 在文本分类、垃圾邮件识别和小样本任务中仍常有很强表现。
七、Naive Bayes 的主要类型
7.1 Gaussian Naive Bayes
适用于连续特征,并假设每个类别下的每个特征服从高斯分布:
P(xj∣Ck)=12πσkj2exp(−(xj−μkj)22σkj2)P(x_j|C_k)=\\frac{1}{\\sqrt{2\\pi\\sigma_{kj}^2}}\\exp\\left(-\\frac{(x_j-\\mu_{kj})^2}{2\\sigma_{kj}^2}\\right)P(xj∣Ck)=2πσkj21exp(−2σkj2(xj−μkj)2)
训练时需要估计:
- 类别先验 P(C_k)。
- 每个类别下每个特征的均值 μ_kj。
- 每个类别下每个特征的方差 σ²_kj。
这些参数通常使用 ML 估计。
7.2 Multinomial Naive Bayes
适用于离散计数特征,尤其适合文本词频。
设词 j 在类别 C_k 中的条件概率为:
P(xj∣Ck)=θkjP(x_j|C_k)=\\theta_{kj}P(xj∣Ck)=θkj
一篇文档中各词出现次数构成多项分布。分类得分可写成:
logP(Ck∣x)∝logP(Ck)+∑j=1nxjlogθkj\\log P(C_k|x)\\propto\\log P(C_k)+\\sum_{j=1}^{n}x_j\\log\\theta_{kj}logP(Ck∣x)∝logP(Ck)+j=1∑nxjlogθkj
其中 x_j 表示词 j 在文档中的出现次数。
7.3 Bernoulli Naive Bayes
适用于二值特征,例如某个词是否出现、某项属性是否存在。
单个特征的条件概率为:
P(xj∣Ck)=pkjxj(1−pkj)1−xjP(x_j|C_k)=p_{kj}^{x_j}(1-p_{kj})^{1-x_j}P(xj∣Ck)=pkjxj(1−pkj)1−xj
其中:
xj∈{0,1}x_j\\in\\{0,1\\}xj∈{0,1}
Bernoulli Naive Bayes 关注的是“是否出现”,而 Multinomial Naive Bayes 更关注“出现多少次”。
7.4 Categorical Naive Bayes
适用于离散类别特征,例如颜色、职业、地区和设备类型。
对于类别特征取值 v:
P(xj=v∣Ck)=count(xj=v,Ck)count(Ck)P(x_j=v|C_k)=\\frac{\\text{count}(x_j=v,C_k)}{\\text{count}(C_k)}P(xj=v∣Ck)=count(Ck)count(xj=v,Ck)
如果某个组合在训练集中没有出现,直接估计会得到零概率,因此通常需要平滑。
八、拉普拉斯平滑
假设某个词从未在类别 C_k 中出现,则:
P(xj∣Ck)=0P(x_j|C_k)=0P(xj∣Ck)=0
因为 Naive Bayes 使用概率乘积,只要一个特征概率为零,整个类别得分就会变成零。
拉普拉斯平滑通过加入伪计数解决这一问题:
P(xj∣Ck)=Nkj+αNk+αVP(x_j|C_k)=\\frac{N_{kj}+\\alpha}{N_k+\\alpha V}P(xj∣Ck)=Nk+αVNkj+α
其中:
- N_kj:特征 j 在类别 k 中的计数。
- N_k:类别 k 下的总计数。
- V:特征取值或词表大小。
- α:平滑系数,常取 1。
当 α=1 时,称为加一平滑。
从贝叶斯角度看,平滑可以解释为给离散分布参数加入先验。
九、Naive Bayes 中 ML 与 MAP 的位置
Naive Bayes 模型包含两类参数:
9.1 使用 ML 估计类别先验
类别先验可以用频率估计:
P(Ck)=NkNP(C_k)=\\frac{N_k}{N}P(Ck)=NNk
其中:
- N_k 是类别 k 的样本数。
- N 是总样本数。
9.2 使用 ML 估计离散条件概率
不使用平滑时:
P(xj=v∣Ck)=NkjvNkP(x_j=v|C_k)=\\frac{N_{kjv}}{N_k}P(xj=v∣Ck)=NkNkjv
这是基于训练数据频率的最大似然估计。
9.3 使用 MAP 估计离散条件概率
当给多项式分布参数加入 Dirichlet 先验时,可以得到带平滑的参数估计。
对称 Dirichlet 先验下,常见形式为:
P(xj∣Ck)=Nkj+αNk+αVP(x_j|C_k)=\\frac{N_{kj}+\\alpha}{N_k+\\alpha V}P(xj∣Ck)=Nk+αVNkj+α
因此,拉普拉斯平滑不仅是数值技巧,也可以看成一种 MAP 或贝叶斯参数估计思想。
十、手写 Gaussian Naive Bayes
下面使用 NumPy 实现一个简单的 Gaussian Naive Bayes。
import numpy as np
class GaussianNaiveBayes:
def fit(self, X: np.ndarray, y: np.ndarray) –> "GaussianNaiveBayes":
self.classes_ = np.unique(y)
n_features = X.shape[1]
self.class_prior_ = {}
self.mean_ = {}
self.var_ = {}
for cls in self.classes_:
X_cls = X[y == cls]
self.class_prior_[cls] = len(X_cls) / len(X)
self.mean_[cls] = X_cls.mean(axis=0)
self.var_[cls] = X_cls.var(axis=0) + 1e-9
return self
def _log_gaussian(self, X: np.ndarray, mean: np.ndarray, var: np.ndarray) –> np.ndarray:
log_coefficient = –0.5 * np.log(2.0 * np.pi * var)
log_exponent = –((X – mean) ** 2) / (2.0 * var)
return log_coefficient + log_exponent
def predict_log_proba(self, X: np.ndarray) –> np.ndarray:
all_scores = []
for cls in self.classes_:
log_prior = np.log(self.class_prior_[cls])
log_likelihood = self._log_gaussian(
X,
self.mean_[cls],
self.var_[cls],
).sum(axis=1)
all_scores.append(log_prior + log_likelihood)
return np.column_stack(all_scores)
def predict(self, X: np.ndarray) –> np.ndarray:
log_scores = self.predict_log_proba(X)
best_indices = np.argmax(log_scores, axis=1)
return self.classes_[best_indices]
测试代码:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.25,
random_state=42,
stratify=y,
)
model = GaussianNaiveBayes()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
十一、使用 scikit-learn
11.1 Gaussian Naive Bayes
from sklearn.datasets import load_iris
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.25,
random_state=42,
stratify=y,
)
model = GaussianNB()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
11.2 Multinomial Naive Bayes 文本分类
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
texts = [
"free prize click now",
"meeting at three pm",
"limited offer claim reward",
"project report is ready",
]
labels = [1, 0, 1, 0]
model = Pipeline([
("vectorizer", CountVectorizer()),
("classifier", MultinomialNB(alpha=1.0)),
])
model.fit(texts, labels)
samples = [
"free reward now",
"the meeting report",
]
print(model.predict(samples))
print(model.predict_proba(samples))
这里 alpha=1.0 表示使用加一平滑。
十二、用代码观察 ML 与 MAP
下面构造一个一维高斯均值估计例子。
已知观测噪声方差为 σ²,参数先验为:
μ∼N(μ0,τ2)\\mu\\sim\\mathcal{N}(\\mu_0,\\tau^2)μ∼N(μ0,τ2)
样本均值为:
xˉ=1N∑i=1Nxi\\bar{x}=\\frac{1}{N}\\sum_{i=1}^{N}x_ixˉ=N1i=1∑Nxi
ML 估计为:
μ^ML=xˉ\\hat{\\mu}_{ML}=\\bar{x}μ^ML=xˉ
MAP 估计为:
μ^MAP=Nσ2xˉ+1τ2μ0Nσ2+1τ2\\hat{\\mu}_{MAP}=\\frac{\\frac{N}{\\sigma^2}\\bar{x}+\\frac{1}{\\tau^2}\\mu_0}{\\frac{N}{\\sigma^2}+\\frac{1}{\\tau^2}}μ^MAP=σ2N+τ21σ2Nxˉ+τ21μ0
代码如下:
import numpy as np
data = np.array([2.1, 2.5, 1.9, 2.3])
sample_mean = data.mean()
sigma_squared = 1.0
prior_mean = 0.0
prior_variance = 1.5
n = len(data)
ml_estimate = sample_mean
map_estimate = (
(n / sigma_squared) * sample_mean
+ (1.0 / prior_variance) * prior_mean
) / (
(n / sigma_squared)
+ (1.0 / prior_variance)
)
print("ML estimate:", ml_estimate)
print("MAP estimate:", map_estimate)
由于先验均值为 0,MAP 结果会被先验向 0 拉近。
如果增加样本数量,数据的权重会变大,MAP 结果会逐渐接近 ML。
十三、Naive Bayes 的优点
13.1 训练速度快
Naive Bayes 通常只需要统计均值、方差、频数或类别概率,不需要迭代优化。
13.2 适合高维稀疏数据
在文本分类中,词表可能包含几万甚至几十万个特征。Multinomial Naive Bayes 仍然可以高效训练。
13.3 小样本下表现稳定
由于模型结构简单、参数数量较少,它在数据量有限时常比复杂模型更稳定。
13.4 输出概率分数
模型可以输出类别后验概率,便于排序、阈值调整和风险评估。
13.5 可解释性较强
可以检查类别先验、词条件概率、均值和方差,理解模型为什么做出某个判断。
十四、Naive Bayes 的局限
14.1 条件独立假设通常不成立
现实中的特征往往相关。例如文本中的词序、上下文和短语关系无法被简单独立假设完整描述。
14.2 概率校准可能不理想
Naive Bayes 的类别判断可能准确,但输出概率有时过于自信。
14.3 连续特征分布假设可能不匹配
Gaussian Naive Bayes 假设类条件特征近似高斯分布。如果真实分布明显偏斜、多峰或重尾,模型性能可能下降。
14.4 无法自动学习复杂特征交互
Naive Bayes 不会像深度神经网络那样自动学习非线性表示和高阶特征组合。
十五、Naive Bayes 与神经网络的关系
Naive Bayes 本身不是深度学习模型,但它与深度学习存在多方面联系。
15.1 都可以使用概率建模
Naive Bayes 显式建模:
P(x∣y)P(y)P(x|y)P(y)P(x∣y)P(y)
神经网络分类器通常直接建模:
P(y∣x;θ)P(y|x;\\theta)P(y∣x;θ)
前者属于生成式分类思想,后者通常属于判别式分类思想。
15.2 神经网络训练通常采用 ML
Softmax 分类网络配合交叉熵,本质上是在最大化条件似然。
15.3 权重衰减可解释为 MAP
神经网络加入 L2 正则化,可以看成对权重施加高斯先验后求 MAP。
15.4 贝叶斯深度学习进一步保留参数不确定性
ML 和 MAP 最终只给出一个点估计:
θ^ML或θ^MAP\\hat{\\theta}_{ML}\\quad\\text{或}\\quad\\hat{\\theta}_{MAP}θ^ML或θ^MAP
完整贝叶斯推断则希望得到整个参数后验:
P(θ∣D)P(\\theta|D)P(θ∣D)
预测时对参数后验积分:
P(y∣x,D)=∫P(y∣x,θ)P(θ∣D)dθP(y|x,D)=\\int P(y|x,\\theta)P(\\theta|D)d\\thetaP(y∣x,D)=∫P(y∣x,θ)P(θ∣D)dθ
贝叶斯神经网络、变分推断和 Monte Carlo Dropout 都与这种思想有关。
十六、生成式模型与判别式模型
Naive Bayes 是生成式分类器,因为它建模联合分布:
P(x,y)=P(y)P(x∣y)P(x,y)=P(y)P(x|y)P(x,y)=P(y)P(x∣y)
预测时再通过贝叶斯定理得到:
P(y∣x)=P(x∣y)P(y)P(x)P(y|x)=\\frac{P(x|y)P(y)}{P(x)}P(y∣x)=P(x)P(x∣y)P(y)
逻辑回归和普通 Softmax 神经网络通常属于判别式模型,它们直接建模:
P(y∣x)P(y|x)P(y∣x)
生成式模型的特点:
- 可以描述数据在不同类别下如何产生。
- 在小样本条件下可能更高效。
- 可以自然处理缺失特征和先验信息。
判别式模型的特点:
- 直接优化分类边界。
- 特征和标签关系建模更灵活。
- 数据充分时通常具有更高的性能上限。
十七、常见误区
误区一:Naive Bayes 要求所有特征完全独立
更准确的说法是:
Naive Bayes 假设特征在给定类别后条件独立。
无条件情况下,特征仍然可以相关。
误区二:ML 表示模型预测概率最大
ML 最大化的是训练数据在参数下出现的概率,而不是直接最大化测试集准确率。
误区三:MAP 就是完整贝叶斯推断
MAP 只保留后验分布的最高点,是一种点估计。
完整贝叶斯推断则保留整个后验分布。
误区四:正则化只是工程技巧
L1 和 L2 正则化都可以从参数先验和 MAP 估计中得到概率解释。
误区五:概率相乘时直接使用浮点数即可
大量小概率连续相乘容易出现数值下溢,应优先在对数空间中计算。
十八、如何选择 ML、MAP 和 Naive Bayes
选择 ML 的情况
- 数据量较大。
- 没有可靠先验。
- 主要目标是拟合观测数据。
- 使用标准深度学习损失函数训练模型。
选择 MAP 的情况
- 数据较少。
- 已知参数应满足某些合理约束。
- 希望通过先验实现正则化。
- 需要把领域知识加入参数估计。
选择 Naive Bayes 的情况
- 文本分类和垃圾邮件识别。
- 高维稀疏特征。
- 训练数据有限。
- 需要快速建立基线模型。
- 需要模型简单、易解释、训练成本低。
十九、总结
Naive Bayes、ML 和 MAP 可以统一在概率学习框架下理解。
最大似然估计只根据数据寻找参数:
θ^ML=argmaxθP(D∣θ)\\hat{\\theta}_{ML}=\\arg\\max_{\\theta}P(D|\\theta)θ^ML=argθmaxP(D∣θ)
最大后验估计同时考虑数据和参数先验:
θ^MAP=argmaxθP(D∣θ)P(θ)\\hat{\\theta}_{MAP}=\\arg\\max_{\\theta}P(D|\\theta)P(\\theta)θ^MAP=argθmaxP(D∣θ)P(θ)
Naive Bayes 使用贝叶斯定理和条件独立假设完成分类:
y^=argmaxCkP(Ck)∏j=1nP(xj∣Ck)\\hat{y}=\\arg\\max_{C_k}P(C_k)\\prod_{j=1}^{n}P(x_j|C_k)y^=argCkmaxP(Ck)j=1∏nP(xj∣Ck)
三者之间的核心联系是:
- Naive Bayes 需要估计类别先验和条件概率。
- 这些参数可以使用 ML 估计。
- 加入先验和平滑后,可以形成 MAP 估计。
- 深度学习中的交叉熵训练对应 ML。
- L1 和 L2 正则化可以从 MAP 的先验解释中得到。
掌握这些概念后,可以更容易理解交叉熵、正则化、生成式模型、贝叶斯神经网络以及概率机器学习的整体框架。
网硕互联帮助中心![[人工智能]Scikit-learn:Python中的实用机器学习库-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/08/20260805224844-6a73bdcc07e92-220x150.png)




评论前必须登录!
注册