如何构建一维信号去噪方法的综合评价分数以筛选最优方法
问题描述
我正在使用小波(不同参数)、FFT等多种方法对一维信号进行去噪,采用skimage.metrics库评估去噪效果,代码片段如下(其中signal为原始含噪信号):
import skimage.metrics as M def get_denoise_metrics(signal, clean_signal): data_range = (min(signal), max(signal)) d = { 'normalized_root_mse' : [np.round(M.normalized_root_mse(signal, clean_signal), 4)], 'peak_signal_noise_ratio' : [round(M.peak_signal_noise_ratio(signal, clean_signal, data_range =data_range[1]), 4)], 'structural_similarity' : [np.round(M.structural_similarity(signal, clean_signal, data_range =data_range[1]), 4)], } return d
由于我使用的去噪方法超过10种,每种方法对应3项评价指标,请问如何构建综合分数以筛选出最优去噪方法?
构建综合分数的可行方案
1. 标准化加权求和法
这是最直接的落地方案,核心是先统一指标的量纲和优劣方向,再根据业务需求分配权重计算综合得分:
- 指标归一化:
- 对
normalized_root_mse(越小越好):norm_nrmse = 1 - (当前方法nrmse值 - 所有方法nrmse最小值)/(所有方法nrmse最大值 - 所有方法nrmse最小值) - 对
peak_signal_noise_ratio和structural_similarity(越大越好):norm_psnr = (当前方法psnr值 - 所有方法psnr最小值)/(所有方法psnr最大值 - 所有方法psnr最小值),norm_ssim同理
- 对
- 加权求和:比如根据你对信号特征的关注程度,设置权重(如
w_nrmse=0.3、w_psnr=0.3、w_ssim=0.4),综合得分公式为:
得分越高的方法越优。score = w_nrmse * norm_nrmse + w_psnr * norm_psnr + w_ssim * norm_ssim
2. 排名累加排序法
不需要处理指标量纲,直接通过排名的方式综合:
- 对每个指标单独排序:
normalized_root_mse从小到大排(第1名得1分,第2名得2分);peak_signal_noise_ratio和structural_similarity从大到小排(第1名得1分,第2名得2分) - 将每个方法的三个指标排名相加,总排名数值最小的方法即为最优
- 优点是操作简单,缺点是无法体现指标间的差异程度(比如两个方法在
normalized_root_mse上差0.1和差0.01,排名差都是1)
3. Pareto最优集筛选法
如果三个指标的优先级无法明确权衡,可以筛选Pareto最优解:
- 逐个对比所有方法:若方法A的
normalized_root_mse≤方法B,且peak_signal_noise_ratio≥方法B,且structural_similarity≥方法B,同时至少有一个指标严格更优,那么方法B可以被淘汰 - 剩下的方法构成Pareto最优集,再根据你的实际业务场景(比如更看重信号结构保留还是噪声去除程度)从中挑选
关键注意事项
- 先验证指标计算正确性:
structural_similarity默认针对2D图像,处理一维信号时需调整参数(比如设置win_size=None或匹配一维窗口大小),避免计算错误影响结果 - 若某个指标在所有方法中的波动范围极小,说明它对区分方法优劣的贡献有限,可以降低权重或直接剔除
内容的提问来源于stack exchange,提问作者Bharat Sharma
相关产品推荐
相关产品推荐

