Skip to content

贝叶斯决策理论

1. 从条件概率到贝叶斯定理

1.1 回顾贝叶斯公式

贝叶斯决策理论是整个统计模式识别的数学基石。它以贝叶斯定理为基础,将分类问题转化为概率推理问题:

P(ωj|x)=P(x|ωj)P(ωj)P(x)

四项的含义:

  • 先验概率(Prior) P(ωj):在观察到任何特征之前,我们对类别 ωj 发生概率的先验信念。例如,一封邮件有 80% 的概率是正常邮件(ω0),20% 的概率是垃圾邮件(ω1

  • 类条件概率密度(Likelihood / Class-conditional Density) P(x|ωj):在已知类别为 ωj 的条件下,观察到特征向量 x 的概率。例如,已知是垃圾邮件的前提下,邮件中出现"免费"一词的概率

  • 证据(Evidence) P(x):归一化因子。计算为全概率:

    P(x)=j=1CP(x|ωj)P(ωj)

    它保证了后验概率之和为 1

  • 后验概率(Posterior) P(ωj|x):观察到特征 x 后,该样本属于类别 ωj 的概率。这是分类决策的真正依据——我们想知道的是:在看到了证据 x 之后,各种可能类别的概率各是多少

贝叶斯定理的直观图解:先验概率如何通过似然更新为后验概率,展示三类(红蓝绿)的类条件密度曲线和后验概率分布

1.2 贝叶斯决策的核心思想

在分类问题中,给定特征 x,我们需要决定它属于哪个类别。贝叶斯决策理论的答案是:

选择使后验概率 P(ωj|x) 最大的类别。

因为贝叶斯公式中的分母 P(x) 对所有类别都相同,所以最大化后验等价于最大化分子:

ω^=argmaxωjP(ωj|x)=argmaxωjP(x|ωj)P(ωj)

这就是最大后验概率准则(Maximum A Posteriori, MAP)。


2. 两种决策准则

2.1 最小错误率决策

目标:使分类错误率 P(error) 最小。

给定 x,若我们预测类别为 ωi,则分类正确的概率为 P(ωi|x),错误的概率为 1P(ωi|x)。因此,最小化错误率等价于:

决策规则:选择 ωi 若 P(ωi|x)>P(ωj|x)ji

这就是直觉上最自然的分类规则:就选后验概率最大的类别

在两分类问题中,决策边界由 P(ω1|x)=P(ω2|x) 定义,等价于:

P(x|ω1)P(x|ω2)=P(ω2)P(ω1)

当似然比超过阈值 先验比的反比 时,决策为 ω1。这是似然比检验(Likelihood Ratio Test)的基本形式。

2.2 最小风险决策

最小错误率决策默认每种错误代价相同,但在实际应用中,不同错误的代价可能天差地别。例如:

  • 将恶性肿瘤误判为良性 的后果远严重于 将良性肿瘤误判为恶性
  • 将合法交易误判为欺诈(导致客户投诉)vs 将欺诈交易误判为合法(导致资金损失)

最小风险决策(Minimum Risk Decision)引入了损失函数(Loss Function)λ(αi|ωj),表示当真实类别为 ωj 时采取行动 αi 所付出的代价。

给定 x,采取行动 αi条件风险(Conditional Risk)为:

R(αi|x)=j=1Cλ(αi|ωj)P(ωj|x)

决策规则:选择使条件风险最小的行动

α=argminαiR(αi|x)

零一损失(0-1 Loss)是最简单的损失函数:λ(αi|ωj)=0i=j;否则 =1。在这种情况下,条件风险退化为错误概率,最小风险决策退化为最小错误率决策。

最小风险决策示意:非对称损失矩阵(疾病诊断场景),展示两种决策边界的不同——最小错误率 vs 最小风险


3. 判别函数与决策面

3.1 判别函数

为了做决策,我们不需要直接计算后验概率——只需比较不同类别的后验概率大小。因此可以定义一组判别函数 gi(x),满足:

选择 ωi 若 gi(x)>gj(x)ji

如果 gi(x)=P(ωi|x),则是最小错误率分类器。但判别函数 gi(x) 可以是后验概率的任意单调递增函数,常用的选择有:

gi(x)=P(x|ωi)P(ωi)(MAP 准则)gi(x)=lnP(x|ωi)+lnP(ωi)(对数形式,数值更稳定)

对数形式将乘法转换为加法,避免了浮点下溢(因为似然可能非常小)。

3.2 决策面

两个类别 ωiωj 之间的决策面(Decision Surface)定义为:

{xRdgi(x)=gj(x)}

这是一个 d1 维的超曲面。在决策面上,两个类别的后验概率相等——分类器对这两个类别的偏好完全相同。

3.3 多元高斯分布下的判别函数

假设每个类别的类条件密度是多元高斯分布:

P(x|ωi)=1(2π)d/2|Σi|1/2exp(12(xμi)TΣi1(xμi))

取对数,去掉与类别无关的常数项,得到判别函数:

gi(x)=12ln|Σi|12(xμi)TΣi1(xμi)+lnP(ωi)

这个判别函数的几何形式取决于协方差矩阵的假设:

情况 1:Σi=σ2I(各向同性、各类别相同) 判别函数退化为:

gi(x)=xμi22σ2+lnP(ωi)

这等价于最近均值分类器(欧氏距离 + 先验偏置),决策边界是 μiμj 连线的垂直平分线(线性)。

情况 2:Σi=Σ(各类别协方差矩阵相同但不一定各向同性) 判别函数变为:

gi(x)=wiTx+wi0

其中 wi=Σ1μiwi0=12μiTΣ1μi+lnP(ωi)。决策边界是线性超平面——也是线性判别分析(LDA)的理论基础。

情况 3:Σi 任意(各类别不同、无约束) 判别函数包含二次项 xTΣi1x,决策边界是二次曲面(椭圆、抛物线或双曲线)。这是二次判别分析(QDA)的理论基础。

三种协方差假设下的决策边界形态:最近均值(直线中垂线)、相同协方差(线性)、不同协方差(二次曲线)


4. ROC 曲线、AUC 与 EER

4.1 混淆矩阵回顾

对于二分类问题,任何分类器(通过阈值调节)都会产生四种结果:

预测为正类预测为负类
真实正类TP (True Positive)FN (False Negative)
真实负类FP (False Positive)TN (True Negative)

由此定义两个关键指标:

  • TPR(True Positive Rate / Recall / Sensitivity)

    TPR=TPTP+FN

    也被称为真正率、召回率、灵敏度。衡量分类器对正类的"覆盖率"。

  • FPR(False Positive Rate)

    FPR=FPFP+TN

    假正率。衡量分类器将负类错误判断为正类的比例。

4.2 ROC 曲线

ROC(Receiver Operating Characteristic)曲线以 FPR 为横轴TPR 为纵轴,通过变化分类器的决策阈值得到一系列 (FPR, TPR) 点,连线即得 ROC 曲线。

曲线解读

  • 曲线越靠近左上角(即 (0,1)),分类器性能越好
  • 对角线(从 (0,0) 到 (1,1))代表随机猜测(AUC=0.5)
  • 曲线在对角线以下表示分类器比随机猜测更差(需要反转决策)

关键点:ROC 曲线对类别不平衡不敏感——因为 TPR 和 FPR 分别只关注正类和负类各自的内部比例,与各类别的绝对样本数无关。

4.3 AUC

AUC(Area Under the ROC Curve)是 ROC 曲线下的面积,取值范围 [0,1]

  • AUC = 1.0:完美分类器
  • AUC = 0.5:随机猜测
  • AUC = 0.0:完全反向(取反后完美)

AUC 有一个优美的概率解释:随机抽取一个正样本和一个负样本,分类器给正样本的打分高于负样本的概率

4.4 EER

等错误率(Equal Error Rate, EER)是当 FPR = FNR(假负率 = 1TPR)时的错误率。EER 越低,分类器性能越好。

EER 在ROC 曲线上的位置:对角线与 ROC 曲线的交点(或 FPR = 1 - TPR 处)。在身份验证系统中常用,因为它给出了"安全"和"便利"之间的平衡点。

ROC 曲线详细标注:AUC 面积、对角线(随机猜测)、EER 点、理想分类器左上角,以及改变阈值的箭头方向指示


5. 从零实现贝叶斯分类器

5.1 核心思路

python
class GaussianBayesClassifier:
    def fit(self, X, y):
        # 1. 对每个类别,估计 class_prior = P(omega_j)
        # 2. 对每个类别,估计均值 mu_j 和协方差 Sigma_j
        # 3. 存储这些参数(这就是训练!)
    
    def predict(self, X):
        # 1. 对每个测试样本和每个类别,计算 ln P(x|omega_j) + ln P(omega_j)
        # 2. 选 log-后验最大的类别

与 k-NN 的非参数特性不同,贝叶斯分类器是参数化方法——它假设数据服从特定分布(这里为高斯),并估计分布的参数。

5.2 协方差矩阵的三种假设

python
if cov_type == 'isotropic':
    # Sigma_j = sigma^2 * I  (shared spherical)
    sigma2 = np.mean([np.var(X[class_j]) for each class])
elif cov_type == 'shared':
    # Sigma_j = Sigma  (shared full covariance)
    Sigma = pooled covariance
elif cov_type == 'full':
    # Sigma_j each class has its own
    Sigma_j = np.cov(X[class_j].T)

三种假设对应三种决策边界形态,从简单到复杂——越简单的假设需要估计的参数越少,但偏差越大。

5.3 log-sum-exp 数值技巧

计算后验概率时,由于指数运算极易导致数值溢出,我们使用 log-sum-exp 技巧

lnP(ωj|x)=lnP(x|ωj)+lnP(ωj)lnkelnP(x|ωk)+lnP(ωk)

后一项用 scipy.special.logsumexp 或手动实现(先减最大值再 exp):

python
log_joint = log_likelihoods + np.log(priors)
log_evidence = logsumexp(log_joint, axis=1, keepdims=True)
log_posteriors = log_joint - log_evidence

本章总结

概念公式/描述关键点
贝叶斯定理P(ω|x)=P(x|ω)P(ω)P(x)先验 + 似然 → 后验
MAP 准则ω^=argmaxP(x|ω)P(ω)等价于最小错误率
条件风险R(αi|x)=jλijP(ωj|x)考虑不同错误的代价
判别函数gi(x)=lnP(x|ωi)+lnP(ωi)对数形式数值稳定
高斯判别gi=12(xμi)TΣi1(xμi)+lnP(ωi)三种协方差假设
TPRTP/(TP+FN)真正率 / Recall
FPRFP/(FP+TN)假正率
ROC 曲线FPR vs TPR(变阈值)对类别不平衡不敏感
AUCROC 曲线下面积正样本得分 > 负样本得分的概率
EERFPR = FNR 时的错误率安全与便利的平衡点
Log-Sum-Explnexi=m+lnexim数值稳定的 log-和-exp

参考

  1. Duda, R. O., Hart, P. E., & Stork, D. G. (2001). Pattern Classification (2nd ed.). Wiley.
  2. Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. DOI: 10.1007/978-0-387-45528-0 第 1.2 节(概率论), 第 4.2 节(判别函数)
  3. Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer. DOI: 10.1007/978-0-387-84858-7 第 4.3 节(LDA)
  4. Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press. DOI: 10.7551/mitpress/8551.001.0001
  5. Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861-874. DOI: 10.1016/j.patrec.2005.10.010
  6. Bradley, A. P. (1997). The use of the area under the ROC curve in the evaluation of machine learning algorithms. Pattern Recognition, 30(7), 1145-1159. DOI: 10.1016/S0031-3203(96)00142-2
  7. Berger, J. O. (1985). Statistical Decision Theory and Bayesian Analysis (2nd ed.). Springer. DOI: 10.1007/978-1-4757-4286-2

📥 Code

上一章: ml01 k-近邻

下一章: ml03 朴素贝叶斯


小贴士:运行前请确保已安装依赖:

bash
pip install numpy matplotlib scikit-learn scipy