贝叶斯决策理论
概述
贝叶斯决策理论是统计决策理论的核心框架,将贝叶斯推断与决策论相结合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_upper6. 实践应用
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, sensitivity9.3 稳健决策
当对损失函数或先验不确定时:
- 使用最小最大后悔原则
- 考虑多个损失函数下的决策
- 进行情景分析
10. 总结
核心概念
- 损失函数:量化决策错误代价
- 风险函数:期望损失
- 贝叶斯风险:先验下的平均风险
- 贝叶斯决策规则:最小化后验期望损失
损失函数与最优估计
| 损失 | 最优估计 | 应用场景 |
|---|---|---|
| 平方 | 后验均值 | 回归、预测 |
| 绝对 | 后验中位数 | 鲁棒估计 |
| 0-1 | 后验众数(MAP) | 分类 |
| 自定义 | 数值优化 | 特定应用 |
与频率学派的关系
- 频率学派风险 是逐点评估
- 贝叶斯风险 是先验下的平均
- 两者在渐近意义下趋于一致
参考资料
相关主题
- bayesian-inference — 贝叶斯推断基础
- bayesian-estimation-theory — 贝叶斯估计理论
- conjugate-priors-complete-derivation — 共轭先验完整推导
- hierarchical-bayesian-models — 层次贝叶斯模型
- bayesian-deep-learning — 贝叶斯深度学习