贝叶斯决策理论

概述

贝叶斯决策理论是统计决策理论的核心框架,将贝叶斯推断与决策论相结合12。它提供了在不确定性下做出最优决策的统一方法论。

核心思想:选择使期望损失(风险)最小的行动。


1. 决策理论基础

1.1 决策问题的基本要素

要素符号描述
参数空间所有可能的参数值
行动空间所有可选择的行动
损失函数采取行动 而参数为 时的损失
先验分布参数的先验分布
样本信息观测数据

1.2 损失函数的定义

损失函数 满足:

  • (最优行动)

1.3 常见损失函数

损失函数形式最优估计特点
0-1损失后验众数分类问题
平方损失后验均值连续问题
绝对损失$L(\theta, a) =\theta - a$
对数损失MLE概率估计
Huber损失分段定义鲁棒后验均值抗异常值

2. 风险函数

2.1 频率学派风险

风险函数定义为:

其中 是决策函数(估计量), 是数据。

2.2 贝叶斯风险

贝叶斯风险(先验风险):

2.3 最小化风险

贝叶斯决策规则

这等价于后验期望损失最小化:


3. 贝叶斯决策规则推导

3.1 平方损失

后验期望损失

最小化得到:

结论:平方损失下,贝叶斯最优估计是后验均值

3.2 绝对损失

后验期望损失

最小化得到:

结论:绝对损失下,贝叶斯最优估计是后验中位数

3.3 0-1损失

后验期望损失

最小化得到:

结论:0-1损失下,贝叶斯最优估计是后验众数(MAP)

3.4 通用公式

对于一般损失函数,最优估计满足:


4. 损失函数与估计量的关系

4.1 对比表

损失函数最优估计偏差-方差分解
平方损失后验均值关注均方误差
绝对损失后验中位数对大误差不敏感
0-1损失后验众数关注分类错误
Huber损失鲁棒后验均值抗异常值

4.2 后验均值 vs MAP

后验均值

MAP估计

关系

  • 当后验对称时,两者相等
  • 当后验偏斜时,均值比MAP更”居中”
  • 从贝叶斯风险角度看,均值在平方损失下是最优的

5. 决策理论的Python实现

import numpy as np
from scipy import stats
 
class BayesianDecisionTheory:
    """贝叶斯决策理论实现"""
    
    @staticmethod
    def posterior_mean(posterior_samples):
        """后验均值(平方损失最优)"""
        return np.mean(posterior_samples)
    
    @staticmethod
    def posterior_median(posterior_samples):
        """后验中位数(绝对损失最优)"""
        return np.median(posterior_samples)
    
    @staticmethod
    def posterior_mode(posterior_samples, bins=50):
        """后验众数(0-1损失最优/MAP)"""
        hist, bin_edges = np.histogram(posterior_samples, bins=bins)
        mode_idx = np.argmax(hist)
        return (bin_edges[mode_idx] + bin_edges[mode_idx + 1]) / 2
    
    @staticmethod
    def bayesian_decision(posterior_pdf, theta_grid, loss_func, action_space):
        """
        一般贝叶斯决策
        
        参数:
            posterior_pdf: 后验密度函数
            theta_grid: theta的网格点
            loss_func: 损失函数 L(theta, a)
            action_space: 可能的行动空间
        
        返回:
            最优行动
        """
        expected_losses = []
        
        for a in action_space:
            # 计算期望损失
            integrand = posterior_pdf(theta_grid) * loss_func(theta_grid, a)
            expected_loss = np.trapz(integrand, theta_grid)
            expected_losses.append(expected_loss)
        
        return action_space[np.argmin(expected_losses)]
 
 
class PosteriorEstimator:
    """后验估计器"""
    
    def __init__(self, samples):
        self.samples = samples
    
    def estimate(self, loss='squared'):
        """
        根据损失函数选择估计方法
        
        参数:
            loss: 'squared', 'absolute', '01'
        """
        if loss == 'squared':
            return np.mean(self.samples)
        elif loss == 'absolute':
            return np.median(self.samples)
        elif loss == '01':
            # 离散参数
            values, counts = np.unique(self.samples, return_counts=True)
            return values[np.argmax(counts)]
        else:
            raise ValueError(f"Unknown loss: {loss}")
    
    def credible_interval(self, alpha=0.05):
        """
        计算可信区间(贝叶斯置信区间)
        """
        lower = np.percentile(self.samples, 100 * alpha / 2)
        upper = np.percentile(self.samples, 100 * (1 - alpha / 2))
        return lower, upper
    
    def highest_posterior_density(self, alpha=0.05):
        """
        最高后验密度区间(HPD)
        """
        from scipy.optimize import minimize_scalar
        
        n = len(self.samples)
        sorted_samples = np.sort(self.samples)
        
        # 找到最短的100(1-alpha)%区间
        min_length = np.inf
        hpd_lower, hpd_upper = 0, 0
        
        for i in range(n):
            j = i + int((1 - alpha) * n)
            if j < n:
                length = sorted_samples[j] - sorted_samples[i]
                if length < min_length:
                    min_length = length
                    hpd_lower = sorted_samples[i]
                    hpd_upper = sorted_samples[j]
        
        return hpd_lower, hpd_upper

6. 实践应用

6.1 分类问题

在多分类问题中,决策空间

期望风险

0-1损失下的最优决策

这正是后验概率最大对应的类别。

6.2 区间估计

决策空间是所有区间

损失函数(覆盖+长度权衡):

6.3 医学诊断

损失矩阵

预测有病预测无病
真的有病0(漏诊代价)
真的无病(误诊代价)0

最优决策


7. 最小最大决策

7.1 最小最大原则

最小最大风险

最小最大决策 满足:

7.2 与贝叶斯决策的关系

  • 当先验分布存在时,贝叶斯决策通常优于最小最大决策
  • 最小最大决策是贝叶斯决策在最不利先验下的极限情况
  • 在博弈论视角下,两者有深刻联系

7.3 例子:正态均值估计

假设 ,平方损失。

贝叶斯风险(先验 ):

最小最大估计量(当 ):


8. 序贯决策

8.1 序贯决策问题

在序贯决策中,可以根据中间结果选择下一步行动。

决策树

      根节点
      /    \
   行动a   行动b
   / \      / \
  o1 o2    o3 o4

8.2 前向归纳法

序贯贝叶斯决策

8.3 最优停止

问题:选择一个时间停止,使得期望收益最大。

示例:在股票市场中,决定何时卖出。

def optimal_stopping(threshold, prices):
    """
    简单最优停止策略
    
    参数:
        threshold: 价格下跌阈值
        prices: 价格序列
    
    返回:
        最优停止时间和价格
    """
    n = len(prices)
    
    # 动态规划
    value = [0] * (n + 1)
    value[n] = prices[n - 1]  # 最后一天必须卖
    
    for t in range(n - 1, 0, -1):
        # 继续或停止
        continue_value = value[t + 1]
        stop_value = prices[t - 1]
        value[t] = max(continue_value, stop_value)
        
        # 检查阈值
        if prices[t - 1] < threshold:
            return t, prices[t - 1]
    
    return 1, prices[0]

9. 实践指南

9.1 损失函数的选择

场景推荐损失理由
连续参数估计平方损失数学上方便
存在异常值绝对损失/Huber鲁棒
分类问题0-1损失自然解释
不对称代价自定义损失反映实际需求

9.2 先验敏感度分析

def sensitivity_analysis(likelihood, prior_families, loss_func):
    """
    先验敏感度分析
    """
    results = []
    
    for prior_name, prior_func in prior_families.items():
        posterior = compute_posterior(likelihood, prior_func)
        estimate = bayesian_decision(posterior, loss_func)
        results.append({
            'prior': prior_name,
            'estimate': estimate
        })
    
    # 计算敏感性指标
    estimates = [r['estimate'] for r in results]
    sensitivity = np.std(estimates) / np.abs(np.mean(estimates))
    
    return results, sensitivity

9.3 稳健决策

当对损失函数或先验不确定时:

  • 使用最小最大后悔原则
  • 考虑多个损失函数下的决策
  • 进行情景分析

10. 总结

核心概念

  1. 损失函数:量化决策错误代价
  2. 风险函数:期望损失
  3. 贝叶斯风险:先验下的平均风险
  4. 贝叶斯决策规则:最小化后验期望损失

损失函数与最优估计

损失最优估计应用场景
平方后验均值回归、预测
绝对后验中位数鲁棒估计
0-1后验众数(MAP)分类
自定义数值优化特定应用

与频率学派的关系

  • 频率学派风险 是逐点评估
  • 贝叶斯风险 是先验下的平均
  • 两者在渐近意义下趋于一致

参考资料


相关主题

Footnotes

  1. Berger, J. O. (2013). “Statistical Decision Theory and Bayesian Analysis.” Springer.

  2. Robert, C. P. (2007). “The Bayesian Choice.” Springer.