ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

贝叶斯检验与信号检测:代价门限推导及蒙特卡洛验证

贝叶斯检验与信号检测:代价门限推导及蒙特卡洛验证 简介这是一份面向信号处理与统计决策学习者的贝叶斯检验与信号检测作业资源包重点解决在已知代价和先验概率条件下如何利用N次独立观测构建最优贝叶斯决策策略的问题。压缩包共2个文件含可运行的Python脚本与docx格式实验报告整体大小仅179KB方便下载与快速查阅。已有261人学习适用于通信、雷达、自动控制等领域刚接触假设检验与统计推断的学生。Python脚本实现了贝叶斯准则下的信号检测流程支持设置先验概率、代价因子与观测次数可直观观察观测数据如何更新后验概率、判决门限如何变化实验报告则详细梳理了贝叶斯公式、似然比检验、错误代价平衡等核心推导并附有代码注释与实验步骤能帮助读者在较短时间内理解从理论公式到工程实现的全过程。1. 贝叶斯检验与信号检测代价比先验更能决定判决门限在雷达接收机和数字通信系统的基带处理流程里“判断当前这 N 个采样点里有没有信号”不是一个单纯的统计检验问题而是一个期望代价最小化问题。贝叶斯检验把虚警和漏检两种错误的代价、信号出现的先验概率、观测数据的似然函数放进同一个决策框架最后收敛成一个非常简单的操作算一次似然比跟门限比大小。很多人在做这类作业时只记得P(H1|X) 0.5这种形似贝叶斯的近似规则真正拿到数据实验时发现误判率根本不收敛原因往往是没把代价矩阵正确转成似然比门限。这份作业的核心是把贝叶斯检验和信号检测两件事连起来做在已知先验概率、代价矩阵并且允许做 N 次独立观测的条件下设计出一个让总期望损失最小的判决策略。下面按从理论到代码的顺序展开先推导门限再给出一套可以直接跑出数据的 Python 实现最后落在排错和延伸上。2. 贝叶斯检验的决策结构先验、似然与代价矩阵如何共同作用2.1 后验概率只是中间量判决规则要落在比值上贝叶斯检验的起点是贝叶斯公式。设 $\theta$ 是待估计的状态$X$ 是观测数据则后验概率写为[ P(\theta|X) \frac{P(X|\theta) P(\theta)}{P(X)} ]其中 $P(\theta)$ 是先验概率$P(X|\theta)$ 是似然函数$P(X)$ 是证据项。信号检测里通常只有两个假设$H_0$ 表示没有信号$H_1$ 表示存在信号。这时比较后验概率 $P(H_1|X)$ 和 $P(H_0|X)$ 的大小等价于比较似然比 $L(X)\frac{P(X|H_1)}{P(X|H_0)}$ 和先验概率比 $\frac{P(H_0)}{P(H_1)}$ 的大小。这里有一个常被忽略的细节纯后验比较隐含了“两类错误代价相等”的假设。在实际的通信和感知系统里虚警多发几次只是浪费计算资源漏检一次可能直接导致目标丢失两者的代价完全不对等。因此贝叶斯检验不会直接用0.5做门限而是把代价矩阵引进来重新推导门限。这也是这个作业和普通假设检验课程作业最大的区别。2.2 代价矩阵与贝叶斯风险定义一个 $2\times2$ 代价矩阵行表示判决结果列表示真实假设$C_{ij}$ 表示在真实假设为 $H_j$ 时判成 $H_i$ 的代价。典型设定如下判决结果真实为 H0无信号真实为 H1有信号判为 H0无信号$C_{00}$$C_{01}$判为 H1有信号$C_{10}$$C_{11}$$C_{10}$ 是虚警代价$C_{01}$ 是漏检代价$C_{00}$ 和 $C_{11}$ 通常是 0代表正确判决没有损失。贝叶斯风险是代价在假设空间上的期望[ R C_{00}\pi_0 P(\text{判}H_0|H_0) C_{10}\pi_0 P(\text{判}H_1|H_0) C_{01}\pi_1 P(\text{判}H_0|H_1) C_{11}\pi_1 P(\text{判}H_1|H_1) ]其中 $\pi_0P(H_0)$$\pi_1P(H_1)$。整个检测器设计的目标是选一个判决区域让 $R$ 最小而不是让准确率最高。这个目标函数的区别决定了门限的形态。2.3 最优门限的推导从风险最小化到似然比门限将判决区域写成“似然比 $L(X)$ 大于某个常数 $\eta$ 就判 $H_1$否则判 $H_0$”。把 $R$ 展开并对判决边界求极值可以得到最优似然比门限[ \eta \frac{\pi_0 (C_{10}-C_{00})}{\pi_1 (C_{01}-C_{11})} ]当 $C_{00}C_{11}0$ 时退化为[ \eta \frac{\pi_0 C_{10}}{\pi_1 C_{01}} ]这个式子的含义很直接虚警代价 $C_{10}$ 越大门限越高检测器越保守不容易乱报信号漏检代价 $C_{01}$ 越大门限越低检测器越倾向于报“有信号”。先验概率 $\pi_0$ 和 $\pi_1$ 也在同一个比例关系里起作用。后面写代码时只需要用这个 $\eta$ 替换固定门限即可。注意区分这个门限和 Neyman-Pearson 准则的门限NP 准则固定虚警概率 $\alpha$ 然后找最大检测概率贝叶斯准则则是先给代价再通过代价和先验反推门限。同一个似然比检验框架下两者只是门限的取法不同。3. N 次观测下的信号检测似然比累积与判决门限的数值关系3.1 独立观测为什么能提高可靠性作业明确要求基于 N 次观测做决策。设 $x_1,x_2,\ldots,x_N$ 独立同分布在 $H_0$ 下每个样本服从 $N(0,\sigma^2)$在 $H_1$ 下服从 $N(s,\sigma^2)$其中 $s$ 是信号幅度$\sigma^2$ 是噪声方差。N 次观测的联合似然比是单次似然比的乘积[ L(X)\prod_{i1}^{N} \frac{P(x_i|H_1)}{P(x_i|H_0)} ]取对数后连乘变成连加数值上更稳定也更能看出累积效应。大数定律在这里的作用是N 越大样本均值 $\bar{x}$ 的方差越小$H_0$ 和 $H_1$ 两种假设下的分布重叠区域越小同样的虚警代价下检测概率越高。这就是“多观测几次更可靠”的数学来源。3.2 高斯模型下的对数似然比推导在 $N(\mu,\sigma^2)$ 假设下把高斯概率密度代入对数似然比[ \ln L(X) \sum_{i1}^{N} \ln \frac{\exp\left(-\frac{(x_i-s)^2}{2\sigma^2}\right)}{\exp\left(-\frac{x_i^2}{2\sigma^2}\right)} ]化简后得到[ \ln L(X) \frac{s}{\sigma^2}\sum_{i1}^{N} x_i - \frac{N s^2}{2\sigma^2} ]用样本均值 $\bar{x} \frac{1}{N}\sum x_i$ 表示就变成[ \ln L(X) \frac{N s}{\sigma^2}\left(\bar{x} - \frac{s}{2}\right) ]判决规则是$\ln L(X) \ln\eta$ 时判 $H_1$。把上式代入并解出 $\bar{x}$ 的门限[ t \frac{\sigma^2}{N s}\ln\eta \frac{s}{2} ]这个 $t$ 是作业代码里真正需要算出来的数。它随 $N$ 增大向 $\frac{s}{2}$ 收敛这说明观测次数足够多时先验和代价对门限的影响会逐渐让位于数据本身。3.3 门限、虚警率与检测概率的数值关系有了 $t$ 之后$H_0$ 下 $\bar{x}\sim N(0,\sigma^2/N)$$H_1$ 下 $\bar{x}\sim N(s,\sigma^2/N)$所以虚警概率和检测概率分别是[ P_{fa} 1-\Phi\left(\frac{t\sqrt{N}}{\sigma}\right),\quad P_d 1-\Phi\left(\frac{(t-s)\sqrt{N}}{\sigma}\right) ]其中 $\Phi$ 是标准正态分布 CDF。设 $s1$$\sigma1$先验 $\pi_00.8$$\pi_10.2$代价 $C_{10}1$$C_{01}2$此时 $\eta2$$\ln\eta0.6931$。不同 N 下的数值如下N判决门限 t虚警率 Pfa检测概率 Pd50.6390.07640.7907100.5690.03590.9131200.5350.00840.9813可以看到N 从 5 增加到 20虚警率下降了一个数量级检测概率从 0.79 提升到 0.98。这就是累积观测对判决可靠性的直接贡献。写作业时如果只验证一次判决很难看出这个趋势建议至少跑三组不同 N 做对照。4. homework1.py 落地贝叶斯检验函数的参数设计与蒙特卡洛验证4.1 把代价矩阵和先验转成门限的代码骨架下面是一段可以直接放进homework1.py的完整实现。它先算最优似然比门限再转成样本均值门限最后用蒙特卡洛模拟验证理论值。代码里的参数设计对应作业描述里“已知代价和先验概率、N 次观测”的前提。import numpy as np from scipy.stats import norm # 代价矩阵行是判决结果列是真实假设 # C[1,0] 是虚警代价C[0,1] 是漏检代价 C np.array([[0.0, 2.0], [1.0, 0.0]]) pi0, pi1 0.8, 0.2 # 先验概率 s 1.0 # 信号幅度 sigma 1.0 # 噪声标准差 N 10 # 观测次数 # 最优似然比门限 eta pi0 * (C[1,0] - C[0,0]) / (pi1 * (C[0,1] - C[1,1])) log_eta np.log(eta) # 等价的对样本均值门限 t sigma**2 / (N * s) * log_eta s / 2 def bayes_detect(x): # x: 长度为 N 的一维 ndarray mean_x np.mean(x) log_lr N * s / sigma**2 * (mean_x - s / 2) return 1 if log_lr log_eta else 0 # 理论值 pfa_th 1 - norm.cdf(t * np.sqrt(N) / sigma) pd_th 1 - norm.cdf((t - s) * np.sqrt(N) / sigma) # 蒙特卡洛模拟 rng np.random.default_rng(0) M 200000 cnt_fa 0 cnt_d 0 for _ in range(M): cnt_fa bayes_detect(rng.normal(0, sigma, N)) cnt_d bayes_detect(rng.normal(s, sigma, N)) pfa_mc cnt_fa / M pd_mc cnt_d / M print(feta{eta:.4f}, t{t:.4f}) print(fPfa: MC{pfa_mc:.4f}, theory{pfa_th:.4f}) print(fPd : MC{pd_mc:.4f}, theory{pd_th:.4f})这段代码的核心逻辑是先用代价矩阵和先验算出 $\eta$再在bayes_detect里计算对数似然比并和 $\ln\eta$ 比较。eta的计算公式里的(C[1,0] - C[0,0])对应虚警代价减正确代价(C[0,1] - C[1,1])对应漏检代价减正确代价。正确代价设成 0公式退化成前面推导的简化形式。t是把似然比门限转换到样本均值域的桥梁。这样做的原因是实际系统里直接观测的是时域波形或特征值而不是抽象的似然比通过 $t$ 可以直接比较“平均幅度”和“门限”工程上更容易调试。4.2 蒙特卡洛验证与结果对照运行上面代码输出大致如下指标蒙特卡洛20万次理论值偏差Pfa0.03620.03590.0003Pd0.91280.9131-0.000320 万次模拟下蒙特卡洛结果和理论值的偏差在 $10^{-3}$ 量级这属于正常的随机波动。如果偏差超过 0.01优先检查是不是门限方向写反或代价矩阵位置不对。如果环境里没有 scipy可以用math.erf代替norm.cdf写法是0.5 * (1 math.erf(x / np.sqrt(2)))结果几乎一致。作业场景里建议两个都跑一遍交叉验证。4.3 改变代价和先验时会发生什么把 $C_{10}$ 从 1 改成 5虚警代价变大期望风险会惩罚“乱报有信号”因此 $\eta$ 变大门限 $t$ 升高虚警率下降检测概率也跟着下降。反之把 $C_{01}$ 调大系统会更倾向于报“有信号”检测概率上升虚警率也上升。这个敏感性分析值得写进实验报告它是贝叶斯检验相对固定门限检测的核心优势代价结构变化时不需要重新设计检测器只要换一个门限。5. 从固定 N 到顺序检测排错、验证与 SPRT 延伸5.1 三个最常见的坑第一个坑是代价矩阵行列写反。C[1,0]一定是“真实为 H0、判为 H1”的虚警代价C[0,1]一定是“真实为 H1、判为 H0”的漏检代价。代码里直接按[判决, 真实]的顺序定义数组注释写清楚能省很多查错时间。第二个坑是门限方向反了。判决条件是“对数似然比大于 log_eta”不是小于。一旦方向反了虚警率和检测概率都会变得非常离谱而且蒙特卡洛结果和理论值对不上。我一般会先看极端情况把观测值全设成很大的正值检测器应该判 H1。第三个坑是 N 没有放进门限公式。有人算出了 $\eta$却直接拿单个样本的似然比去和 $\ln\eta$ 比较完全忽略了样本均值方差是 $\sigma^2/N$ 这个事实。N 越大数据本身的噪声越小门限向 $s/2$ 收敛这个趋势必须在代码里体现出来。5.2 延伸把固定 N 换成序贯概率比检验固定 N 的贝叶斯检验简单可靠但它在观测数量上不够灵活。如果前几次观测已经提供了足够强的证据继续等后面的样本是浪费。序贯概率比检验SPRT的思路是设两个门限 $A$ 和 $B$每来一个样本就更新一次对数似然比超过上线判 H1低于下线判 H0处于中间继续观测。工程上常用 Wald 近似设定[ A \approx \frac{1-\beta}{\alpha},\quad B \approx \frac{\beta}{1-\alpha} ]其中 $\alpha$ 是虚警率$\beta$ 是漏检率。SPRT 的优势是平均观测次数比固定 N 少适合雷达脉冲检测这类对响应时间敏感的场景。5.3 验证作业结果的三个小技巧第一个技巧是校核门限等价性随机生成一组观测分别用“比较 $\ln L(X)$ 和 $\ln\eta$”和“比较 $\bar{x}$ 和 $t$”两种方式做判决两者结果必须完全一致不一致说明公式推导有问题。第二个技巧是做代价极值测试把 $C_{10}$ 设为 0此时虚警没有代价检测器应该倾向于判 H1把 $C_{01}$ 设为 0漏检没有代价检测器应该倾向于判 H0。这两个极端测试能快速暴露代价矩阵逻辑错误。第三个技巧是观察 N 的收敛趋势用 $N1,2,4,8,16,32$ 跑一组对照实验画 Pfa 和 Pd 随 N 变化的曲线。虚警率单调下降、检测概率单调上升说明代码逻辑正确曲线出现抖动或反转第一优先级排查随机种子、门限公式和代价矩阵顺序。本文还有配套的精品资源点击获取
返回列表