如何在NumPy加权平均中给更小的MAE值分配更高权重
解决方案
你当前的权重与MAE呈正相关关系,因此会出现MAE越高的模型权重越大的问题。要实现MAE越低权重越高的需求,核心是构造随MAE增大而单调递减的函数计算权重,以下是几种常用的可直接落地的实现方案:
方案1:简单倒数加权(最常用)
直接对每个MAE取倒数作为权重,逻辑简单无需额外调参,适合绝大多数场景,额外加极小值避免MAE为0时出现除零错误:
import numpy as np # 各模型的MAE值列表 mae_list = [1.640, 1.675, 1.514, 1.563, 1.667] # 计算反向权重 weights_mae = 1 / (np.array(mae_list) + 1e-8) # 计算加权平均 mean = np.average(val_list, axis=0, weights=weights_mae)
方案2:归一化倒数加权
如果需要所有模型权重之和为1,方便后续结果校验,可以对倒数后的权重做归一化处理:
import numpy as np mae_list = [1.640, 1.675, 1.514, 1.563, 1.667] weights_mae = 1 / (np.array(mae_list) + 1e-8) # 归一化处理,权重和为1 weights_mae = weights_mae / weights_mae.sum() mean = np.average(val_list, axis=0, weights=weights_mae)
方案3:指数加权(可调整权重差距)
如果需要拉大MAE表现差异大的模型之间的权重差,可以用指数衰减函数计算权重,调整参数k即可控制权重差异幅度,k值越大,MAE更低的模型权重优势越明显:
import numpy as np mae_list = [1.640, 1.675, 1.514, 1.563, 1.667] # 调整k值控制权重差距幅度 k = 2 weights_mae = np.exp(-k * np.array(mae_list)) # 可选做归一化处理 weights_mae = weights_mae / weights_mae.sum() mean = np.average(val_list, axis=0, weights=weights_mae)
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

