1. 当模型遇上"偏科"数据:不平衡分类的困境
第一次处理信用卡欺诈检测数据时,我盯着屏幕上的统计数字愣住了——正常交易记录占比99.8%,欺诈交易仅占0.2%。这种极端不平衡的数据就像让小学生参加高考,模型很快学会了一个"万能答案":永远预测"正常交易",准确率就能达到99.8%!但这显然不是我们想要的结果。
不平衡数据在真实业务场景中比比皆是:医疗领域的罕见病诊断、制造业的缺陷产品检测、网络安全中的异常流量识别...传统交叉熵损失函数在这些场景下会陷入"多数派暴政",导致模型对少数类视而不见。我曾用标准交叉熵训练过一个医疗数据集,模型对肺炎的召回率只有可怜的12%,而健康样本的准确率却高达98%——这种"偏科"模型在临床上毫无价值。
问题的本质在于损失函数的计算方式。假设数据集中有1000个负样本和10个正样本,每个样本对总损失的贡献是均等的。即使模型把所有正样本都预测错误,带来的损失增加也只有10个单位,而正确预测负样本却能减少1000单位损失——模型自然会选择"弃车保帅"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 加权损失函数的数学直觉
2.1 损失函数的"跷跷板"原理
想象你在玩跷跷板:一端坐着体重较轻的少数类(比如欺诈交易),另一端是胖胖的多数类(正常交易)。标准损失函数就像把支点放在正中间,结果多数类永远把少数类翘在高空中。加权损失函数的妙处在于移动支点位置——给轻的一端加砝码(增加权重),直到两边达到平衡。
数学上,加权交叉熵损失可以表示为:
python复制Loss = -Σ [w_i * y_i * log(p_i)]
其中w_i就是我们要为每个类别精心设计的权重。这个简单的改动让模型意识到:错判一个欺诈交易的成本,可能相当于错判100个正常交易。
2.2 主流权重计算策略对比
在实践中,我测试过三种常见的权重分配方法:
-
逆频率加权:最直观的方法
python复制
weight = total_samples / (class_counts * num_classes)比如在1000个样本中,A类100个,B类800个,C类100个,那么权重就是[10, 1.25, 10]
-
平滑逆频率:防止极端权重
python复制
w
