深夜的急诊室,一位年轻的实习医生正忙得满头大汗。今晚来了三十个患者:二十八个是普通感冒发烧,只有两个是胸口剧痛、疑似心肌梗死的危重病人。实习医生效率惊人,半小时看完了二十八个感冒患者,每个都开了退烧药。轮到那两个胸痛病人时,他已经累得只想快点下班,简单问了几句就让他们去门诊排队。 第二天早上,急诊科主任拿到了两份报告:一份是实习医生的看诊记录,另一份是当晚的抢救记录——那两个胸痛病人中,有一个在候诊时晕倒,虽然最终抢救回来了,但错过了黄金时间。 主任叹了口气,在晨会上说了一句话:“在这间急诊室里,看错一个感冒患者,多花点药钱就过去了;但漏看一个危重病人,赔上的可能是一条命。所以,我们考核医生的标准,不能只看他看了多少病人,更要看他有没有犯下代价巨大的错误。” 这句话,恰恰道出了机器学习中一个重要课题——代价敏感学习(Cost-Sensitive Learning)。在很多真实任务中,不同类别的错误代价完全不同:把垃圾邮件误判为正常邮件,代价很低;把癌症报告误判为健康,代价可能是生命。而AI模型天生“懒惰”,它只追求错误数量最少,于是会像实习医生一样,拼命讨好数量多的那类样本,把珍贵的注意力全给了感冒患者。 这篇文章,就是要教你三种让模型“像急诊科老医生一样分诊”的方法:给决策树装上代价意识、用MetaCost重新评估每个样本、以及用Focal Loss让模型自动把精力倾注在难样本上。
对AI从业者来说,实际工作中80%的分类任务都会遇到类别不平衡问题。掌握代价敏感学习,意味着你不仅能“跑通”模型,还能在医疗、金融、质检等高风险场景中做出真正可用的决策——这是从工程师走向高级算法专家的重要一步。
目录
可视化演示
展示线性回归模型通过梯度下降算法逐步拟合数据的过程,实时显示权重、偏置和损失变化,支持学习率调节。
本节配有交互动效(进入视口后自动加载,约 3KB)。
梯度下降线性回归 青绿色点为训练数据,浅青色直线为当前拟合 右上角小图显示损失下降曲线 w := w - α · ∂L/∂w 梯度下降沿损失函数负梯度方向更新参数
代价矩阵设计:急诊室主任的打分表
急诊科主任把实习医生叫到办公室,给他看了一张表格。表格上有两行两列:一行写着“实际是危重病人”,一行写着“实际是普通感冒”;一列写着“判断为危重”,一列写着“判断为感冒”。主任在格子里填上数字——判断正确填0,误判感冒填10,把感冒误判为危重填1。“以后考核你,就看这张表的总分。”主任说,“漏掉一个危重病人扣10分,误收一个感冒患者只扣1分。你愿意多收几个感冒的,也不许漏掉一个胸痛的。”
这就是代价敏感学习的起点——代价矩阵(Cost Matrix)。普通机器学习模型在训练时只关心“对错”,把每个错误都看成等价的;但现实中,把恶性肿瘤说成良性,和把良性说成恶性,后果天差地别。代价矩阵就是一张“错误代价打分表”,告诉模型:哪种错误最致命。
为什么模型天生会忽视少数类?因为模型是个“考试机器”,它只追求总错误数量最小。如果全班100人里90个学霸、10个学渣,它只要照抄学霸的答案就能对90题,根本不关心那10个学渣有没有学会。但当学渣的“错误”代价是学霸的10倍时,聪明的做法就变了——哪怕多错几道学霸题,也要把学渣的题做对。代价矩阵,就是给模型换一张“加权考卷”。
形式上,设类别集合为\{0,1\},代价矩阵 $C$ 中 $C_{ij}$ 表示“真实类别为 $i$ 却预测为 $j$”的代价。总代价是所有误分类代价的总和:
有了这张“打分表”,下一步就是让各种机器学习算法学会按这个标准行事。正如主任把打分表贴在了分诊台的墙上,每个医生都必须照着执行。
- 混淆矩阵计数$N_{ij}$ 表示真实类别为 $i$ 但被预测为 $j$ 的样本个数,比如真实是正类却预测为负类的数量
- 假阴性代价真实为正类(危重病人)却预测为负类(感冒),即漏诊数量 $FN$ 乘上代价 $C_{10}$
- 假阳性代价真实为负类(感冒患者)却预测为正类(危重),即误报数量 $FP$ 乘上代价 $C_{01}$
- 全部位置求和把混淆矩阵所有格子都乘上对应代价再相加,就是模型的总代价
代价敏感决策树:给分诊流程装上秤
老主任又做了一件事:他把分诊台的流程也改了。原来的分诊护士只看体温,超过38度就送发热门诊,不够38度就让人排队——但那个胸闷的危重病人,体温只有36.5度,就这么被漏掉了。新流程里,护士手里多了一把“秤”:每个来就诊的人,先按“是否像危重病人”加权——胸痛、大汗、家族心脏病史的,权重直接乘以10。分诊时不看人数多少,而是看“加权后的总分”来做判断。
这把“秤”,就是代价敏感决策树(Cost-Sensitive Decision Tree)。普通决策树在选特征时,用的是信息增益——哪个特征能把样本分得“最纯”就用哪个。但“纯”的定义是平均数视角:多数类样本多,把多数类分开就能获得很高的纯度。代价敏感决策树的改造,就是在计算纯度时给每个样本称重,让少数类的样本在“投票”时拥有更大的话语权。
具体做法是在计算信息增益之前,给每个训练样本赋予一个与代价相关的权重。若少数类(正类)与多数类(负类)的误分类代价比为 $\lambda = C_{10}/C_{01}$,则正类样本的权重为 $\lambda$,负类样本权重为 1。分裂时使用加权的熵来衡量纯度:
除了分裂和叶子标记,剪枝阶段同样用加权代价来评估——如果剪掉某个子树后加权总代价更小,就允许剪枝。这把“秤”从头到尾都在称,每一个环节都不被多数类的数量优势绑架。分诊台的新流程,就这样生效了。
\displaystyle \tilde{p}_k = \frac{\sum_{i \in D} w_i \cdot [y_i = k]}{\sum_{i \in D} w_i}, \qquadH_w(D) = -\sum_{k=1}^{K} \tilde{p}_k \log_2 \tilde{p}_k- 定义样本权重正类样本的权重是代价比 $\lambda = C_{10}/C_{01}$,负类样本权重为1,让少数类的错误更“值钱”
- 加权类别占比第 $k$ 类的占比不再按样本个数算,而是按权重和算
- 加权熵计算把普通熵公式里的占比替换为加权占比,得到加权熵
- 叶子标记规则每个叶子节点统计各类的加权占比,预测为第 $k$ 类的期望代价为 $\sum_j \tilde{p}_j C_{kj}$,取最小者作为该叶子的标签
MetaCost重加权:资深医生的二次会诊
改完分诊流程后,老主任还是不放心。他安排了一场“二次会诊”:每天下班后,让三位资深医生把所有被诊断为“感冒”的病历重新看一遍。三位医生各自独立判断,投票得出“这个病人有多大概率是真的危重”。然后按那张打分表算:如果按“危重”处理导致的期望代价更小,就把这个病人的标签改成“危重”,重新收治。一整个月下来,所有标签都被“按代价重新洗过”,然后把这些修正后的结论贴回病历库,让新医生照着学。
这就是MetaCost,一种与具体模型无关的包装方法(Wrapper Method)。它不要求你换掉分类器,而是分三步走:第一步,用集成模型(通常用Bagging训练多个同类模型)估计每个样本属于各类别的概率;第二步,按代价矩阵计算每个样本被划分为各类的期望代价,选取期望代价最小的类别作为它的新标签;第三步,用修正后的数据集重新训练一个分类器。
MetaCost的核心思想可以用一句话概括:“既然模型分不清,那就先算出'分错到底要赔多少',然后让每个样本的标签自己去选那个最不赔钱的类别。”它的关键在于那步概率估计——为什么要用多个模型投票?因为单个模型估计的概率不够稳,容易因训练集的小扰动而剧烈变化。
1. 估计类别概率:用 $T$ 个Bagging模型的平均来估计 $P(y=j|x)$,相当于三位资深医生独立判断后投票
2. 计算期望代价:把 $x$ 判为第 $i$ 类时,遭遇各类真实情况的代价加权求和,就是期望代价
3. 选取最小代价类:在所有类别中挑期望代价最小的当作新标签,为 $x$ “重新画一条诊断结论”
4. 重训练模型:把所有样本的新标签拼成修正后的数据集 $D' = \{(x_1,\hat{y}_1),\dots,(x_m,\hat{y}_m)\}$,在其上训练最终模型
MetaCost的优点是“百搭”——无论你原本用的是决策树、SVM还是逻辑回归,都可以套上这层外壳;缺点也显而易见,它需要训练多轮模型,计算开销较大。但这就像每天的二次会诊虽然辛苦,却能救回那个被漏掉的胸痛病人——值了。
阈值移动技术:调整收治标准的艺术
一个月后,老主任发现了一件有意思的事。新来的医生虽然接受了新流程,但遇到“疑似危重但概率不到一半”的病人时,还是容易犹豫——因为学校里教的规矩是“概率超过50%才收治”。于是主任干脆把这条规矩改了:从现在起,只要病人有30%的可能是危重,就收进抢救室观察。结果那个月,漏诊率下降了一半,虽然误收人数变多了,但总代价反而降到了历史最低。
这个操作,就是阈值移动(Threshold Moving)。在很多分类模型里,模型输出的不是一个类别,而是一个概率,比如 $P(y=1|x)=0.7$。默认情况下,我们把 0.5 当作分界线:大于等于0.5判正类,小于0.5判负类。但这条0.5的分界线,其实是“假装两类错误代价相等”时的最优解。当代价不对称时,分界线就该移动。
阈值移动要做的事极其简单:在模型训练完之后,把决策阈值从0.5往左挪一点(或往右),让更多(或更少)的样本被分到少数类。难的是,阈值到底挪到哪?当模型输出的概率 $p = P(y=1|x)$ 校准良好时,理论最优阈值由代价比决定:
在实际项目中,理论阈值依赖“概率校准良好”这个前提,所以更稳妥的做法是:在验证集上把阈值从0到1遍历一遍,选使F1-score或总代价最小的那个值——这个过程叫验证集搜索。阈值移动的最大好处是“零成本”:模型不用重新训练,只需要在预测时拧一下旋钮,简直是算法界的“免费午餐”。
- 决策规则定义概率 $p \geq t$ 判为正类,$p < t$ 判为负类。$t$ 是我们手心里的旋钮
- 判为正类的期望代价把 $x$ 判为正类时,若真实是负类,则付出 $C_{01}$,期望代价为 $(1-p)C_{01}$
- 判为负类的期望代价把 $x$ 判为负类时,若真实是正类,则付出 $C_{10}$,期望代价为 $p C_{10}$
- 令两者相等的阈值当 $p$ 满足 $(1-p)C_{01} = p C_{10}$ 时,两种判断的期望代价相同,解出 $p = t^*$
Focal Loss损失:把查房时间留给疑难杂症
急诊室的故事还没完。老主任发现,即便改了收治标准,医生查房时还是有个坏习惯:碰到感冒患者,两分钟就看完;碰到危重患者,却因为症状不典型,反而草草处理。于是主任想了一个“奖惩制度”:每个医生的绩效,不再按“处理了多少病人”算,而是按“处理好了多少难病人”算。一个被轻松处理的感冒患者,绩效权重几乎归零;一个被盯住的危重患者,哪怕最后没能救回来,只要你尽心了,绩效也照算不误。
在深度学习中,这个“奖惩制度”就是Focal Loss。标准的交叉熵损失(CE)有个问题:那些已经被模型分对、且预测概率很高的“易样本”,每错一点点也会贡献不小的损失,于是大量易样本的梯度累积起来,把“难样本”的梯度给淹没掉了。Focal Loss做的,就是给每个样本的损失乘上一个调制因子 $(1-p_t)^\gamma$——$p_t$ 是模型对真实类别的预测概率,如果 $p_t$ 接近1(易样本),调制因子接近0,损失被压得很低;如果 $p_t$ 很小(难样本),调制因子接近1,损失被完整保留。
1. 定义真实类别的预测概率:$p_t$ 表示模型分配给真实标签的那个概率。真实为1时 $p_t=p$,真实为0时 $p_t=1-p$
2. 调节因子:$(1-p_t)^\gamma$ 对易样本($p_t\to 1$)赋予接近0的权重,对难样本($p_t\to 0$)赋予接近1的权重
3. 平衡因子:$\alpha_t = \alpha$(当 $y=1$)或 $1-\alpha$(当 $y=0$),缓解类别不平衡的初始差异
4. 梯度特性:Focal Loss对模型参数的梯度,相当于把交叉熵的梯度乘上 $(1-p_t)^\gamma$,难样本在总梯度中的占比因此显著提升
Focal Loss 最早出自目标检测领域的RetinaNet,它把“正负样本极度不均”和“易难样本混杂”两大难题一网打尽。现在,几乎所有处理不平衡数据的深度学习任务——从医学影像到欺诈检测——都可以默认试一版 Focal Loss。它就像那个奖惩制度,逼着模型把有限的“查房时间”留给真正棘手的病人。
方法对比评估:不同科室的用人之道
急诊室改革之后,老主任给全院做了个总结。他发现,不同的科室适合不同的策略:急诊室病人情况紧急来不及反复训练,就用阈值移动,立竿见影;住院部需要精确分诊,就用MetaCost,多花些功夫做二次会诊;ICU里设备先进(GPU资源充足),模型得盯着监护仪上的每一帧数据,就用Focal Loss。这个“用人之道”,就是我们在实际项目里选型时的决策框架。
三种方法各有优劣。代价敏感决策树把代价内嵌到树的学习过程中,适合处理表格数据、可解释性要求高的场景(如信贷审批);MetaCost是模型无关的包装方法,任何分类器都可以套用,但需要训练多个基模型,计算开销大;阈值移动是三者中成本最低的,模型训练完后再调一个参数即可,但它要求模型能输出较好的概率估计;Focal Loss则是深度学习的不二之选,尤其在图像、文本等高维数据上效果显著,但引入了 $\gamma$ 和 $\alpha$ 两个超参数,需要调参经验。
评估时不能只看准确率——在不平衡数据上,模型把所有样本都判成多数类也能拿到很高的准确率,却毫无用处。要用对少数类敏感的指标:
选择策略可以记住一条口诀:表格数据、要解释,选代价敏感决策树;模型任意、能等训练,选MetaCost;概率输出、求快速,选阈值移动;深度学习、大数据,选Focal Loss。 三者不是互斥的——你完全可以用MetaCost重标注数据,再训练一棵代价敏感决策树,最后用阈值移动微调。就像医院里,分诊流程、二次会诊、收治标准完全可以同时升级。重要的是,先想清楚那张代价矩阵——它是一切策略的源头。
- 灵敏度(Sensitivity)真正的危重病人中,有多少比例被成功识别出来,也叫召回率
- 特异度(Specificity)真正的普通患者中,有多少比例被正确放行
- 几何平均两者相乘再开平方,任何一项偏低都会拉低G-mean,避免模型走极端
AI 应用场景
信用卡欺诈检测
阶段:模型训练与阈值调优阶段
解决的问题:银行每天处理千万级交易,真实欺诈交易占比不足0.1%。传统模型为了降低整体错误率,会倾向于把所有交易都判为正常,导致漏掉大量欺诈——但一笔欺诈交易动辄损失数万元,而一次误判最多只是让客户打个电话确认。用代价矩阵量化后,欺诈漏检的代价通常设定为正常误报的50到100倍。
具体案例:某支付平台的风控团队在逻辑回归模型上应用阈值移动,通过验证集搜索将决策阈值从0.5下调至0.08后,欺诈交易召回率从47%提升至82%,虽然误报率翻了一倍,但平台每月挽回的欺诈损失从120万元增加到310万元,净收益显著提升。
医学影像辅助筛查
阶段:数据准备与模型选型阶段
解决的问题:肺结节筛查中,恶性结节(阳性)占比通常低于5%。放射科医生最担心的是漏诊——一个被漏掉的恶性结节可能在半年后发展为晚期癌症。代价敏感决策树和Focal Loss在此类任务中各有应用:前者用于结构化病历数据(年龄、吸烟史、结节尺寸),后者用于CT影像的深度学习分割与分类模型。
具体案例:某三甲医院与AI公司合作,使用Focal Loss(γ=2,α=0.25)训练肺结节分类网络。相比普通交叉熵,模型的恶性肿瘤召回率从78%提升至93%,每个假阳性结节会被标记为“建议随访”而非“疑似恶性”,既保住了召回率,也没有增加医生的恐慌性复查负担。
工业质检中的缺陷检测
阶段:模型的构建与评估阶段
解决的问题:流水线上的产品缺陷率通常只有1%左右。一条自动化质检线如果漏掉缺陷产品,流入市场会引发退货、赔偿甚至品牌危机;而把良品误判为缺陷,只是多了一次人工复检。MetaCost非常适合这里的“老模型改造”场景——工厂原有的分类模型不需要推倒重来。
具体案例:某电子元件厂利用MetaCost对已有的SVM质检模型进行包装:先用Bagging决策树估计每个样本的缺陷概率,再按代价矩阵重新标注样本并重训模型。改造后,缺陷漏检率从5.2%降至1.1%,而人工复检量仅增加了8%,整体质量损失成本下降了63%。
Python 演示
import numpy as np def cross_entropy(p, y): # p: 模型预测正类的概率(0到1), y: 真实标签(0或1) p = np.clip(p, 1e-12, 1 - 1e-12) p_t = np.where(y == 1, p, 1 - p) return -np.log(p_t) def focal_loss(p, y, alpha=0.25, gamma=2.0): p = np.clip(p, 1e-12, 1 - 1e-12) p_t = np.where(y == 1, p, 1 - p) alpha_t = np.where(y == 1, alpha, 1 - alpha) return -alpha_t * (1 - p_t) ** gamma * np.log(p_t) y = np.array([1, 0, 1, 0])p = np.array([0.9, 0.1, 0.45, 0.55]) ce = cross_entropy(p, y)fl = focal_loss(p, y) print("样本: 易正类 易负类 难正类 难负类")print("交叉熵:", ce)print("Focal: ", fl)print("总损失: CE=%.4f FL=%.4f" % (ce.sum(), fl.sum())) ce_easy = ce[:2].sum()ce_hard = ce[2:].sum()fl_easy = fl[:2].sum()fl_hard = fl[2:].sum()print("难/易损失比: CE=%.2f FL=%.2f" % (ce_hard / ce_easy, fl_hard / fl_easy))
def cross_entropy(p, y):定义标准交叉熵函数,输入模型预测概率和真实标签,输出逐样本损失p_t = np.where(y == 1, p, 1 - p)提取“模型给真实标签的概率”:标签为1取p,标签为0取1-palpha_t = np.where(y == 1, alpha, 1 - alpha)按真实类别分配平衡因子,正类用α,负类用1-α(1 - p_t) ** gamma调制因子:(1-p_t)越接近0(易样本)权重越小,p_t越小(难样本)权重越大ce[:2].sum() / fl[:2].sum()对比4个样本中前两个易样本与后两个难样本的损失占比,验证Focal Loss是否把“注意力”转移到了难样本上
常见误区
误区以为处理类别不平衡的终极方法就是SMOTE过采样或随机欠采样,觉得“把少数类样本复制几份”和“代价敏感学习”是一回事。
正解过采样和欠采样属于数据层面的方法,它们改变的是训练集的分布;代价敏感学习属于算法层面的方法,它改变的是模型对错误的“定价”。两者虽然目标相似但机制不同,而且可以结合使用。就像急诊室增加危重病人演练(过采样)和调整绩效考核权重(代价敏感)是两套不同的管理手段。
为何常见:网上教程讲类别不平衡时总是先讲采样方法,导致很多人误以为这是唯一解法,忽略了“错误代价不同”这一更深层的视角。
误区觉得调制因子的指数γ设得越大,模型对难样本的关注就越强,效果一定越好,于是直接设γ=5或更高。
正解γ过大会导致几乎所有易样本的损失都被压到接近零,模型在训练初期“无损失可学”,反而会使训练不稳定甚至不收敛。实践中γ=2是论文验证过的经典值,1到3之间值得尝试,超出这个范围通常弊大于利。
为何常见:看到“调制因子能降低易样本权重”就直觉地认为“降低得越多越好”,忽视了模型也需要一定数量的易样本信号来稳定学习过程。
误区以为改了决策阈值之后,需要用新的阈值重新跑一遍训练流程,否则模型“不知道新标准”。
正解阈值移动只影响预测阶段,不影响训练阶段。模型学到的概率分布不变,只是判断“大于多少算正类”的开关被拧动了。就像收治标准变了,但医生的诊断水平并没有变——他只是更愿意把病人收进来观察。你唯一需要保证的是模型输出的概率是校准良好的,否则理论最优阈值公式就不成立。
为何常见:很多人把“模型的判断标准”等同于“训练目标”,实际上分类模型训练输出的是概率,阈值是事后附加的决策层。
误区觉得代价矩阵应该写成 0和1 组成的对称形式,即“错任何一类代价都一样”,或者把对角线外的两个格子填成相同的数字。
正解代价敏感学习的前提恰恰就是代价不对称——$C_{10} \ne C_{01}$。如果两个方向的错误代价相同,整个代价敏感框架就退化为普通的错误率最小化。比如漏诊代价是误报代价的10倍,这个“10倍”才是驱动模型改变决策的真正信息。
为何常见:教科书里的混淆矩阵通常只标“正确/错误”两种状态,让人形成了“所有错误等价”的思维定式,忽略了对角线外的两个格子其实可以填完全不同的数字。
误区训练完代价敏感模型后,习惯性地打印accuracy,看到95%就觉得大功告成。
正解在不平衡数据上,准确率是最有欺骗性的指标。全部判为多数类就能拿到95%的准确率,但代价敏感模型恰恰牺牲了一部分准确率去换取少数类的召回。应该用G-mean、F1-score、AUC以及基于代价矩阵的“总代价”来评估——看模型是否真的把错误花在了“便宜”的地方。
为何常见:人天生对“百分比”敏感,95%看起来比78%漂亮,却忽略了两个数字衡量的是完全不同的东西。
面试题
Q1. 代价敏感学习解决的核心问题是什么?
- A.模型训练速度太慢
- B.不同类别错误代价不对称← 正确答案
- C.特征数量太多难以筛选
- D.模型在测试集上过拟合
答案:B。代价敏感学习的出发点是“漏诊与误报代价不同”。就像急诊室里漏掉危重病人扣10分、误收感冒患者只扣1分,模型需要按代价而非数量做决策。A是计算效率问题,C是特征工程问题,D是泛化问题,均与“代价不对称”无关。
Q2. 在代价矩阵中,$C_{10}$ 表示什么?
- A.真实正类预测为正类的代价
- B.真实负类预测为负类的代价
- C.真实正类预测为负类的代价← 正确答案
- D.真实负类预测为正类的代价
答案:C。$C_{ij}$ 表示“真实类别为i却预测为j”的代价。$C_{10}$ 即真实为1(正类)、预测为0(负类),对应把危重病人看成感冒的漏诊情形,通常代价最高。A和B都对应判断正确的格子,代价一般是0;D对应误报。
Q3. 代价敏感决策树与普通决策树最主要的区别是什么?
- A.使用更多训练数据
- B.分裂时使用加权熵计算信息增益← 正确答案
- C.不再需要剪枝操作
- D.只使用少数类样本训练
答案:B。代价敏感决策树给每个样本赋予与代价相关的权重,用加权熵替代普通熵来选择分裂特征,叶子标记也按期望代价最小化确定。它并不减少数据(A错误),剪枝仍需要且采用加权代价评估(C错误),更不是只用少数类训练(D错误)。
Q4. MetaCost中“重新标注样本”的具体规则是什么?
- A.随机给样本翻转标签
- B.按类别数量最多的类标注
- C.按期望代价最小的类标注← 正确答案
- D.按模型置信度最高的类标注
答案:C。MetaCost先用集成模型估计 $P(y=j|x)$,再计算划分为各类的期望代价 $R(i|x)=\sum_j P(j|x)C_{ij}$,最后选择期望代价最小的类别作为新标签。它不是随机翻转、不是数数量,也不只看置信度,而是把代价乘以概率的“性价比”综合比较。
Q5. 关于阈值移动,下列说法正确的有?
- A.需要重新训练模型
- B.只在预测阶段修改决策阈值← 正确答案
- C.最优阈值可由代价比计算← 正确答案
- D.模型必须输出概率而非直接输出类别← 正确答案
答案:BCD。阈值移动的最大优点就是不需要重新训练,A错误。它只需要在预测时调整概率的切分点,B正确。在概率校准良好的前提下 $t^*=C_{01}/(C_{01}+C_{10})$,C正确。如果模型只输出类别而不输出概率,阈值移动就无从谈起,D正确。
Q6. Focal Loss中调制因子 $(1-p_t)^\gamma$ 的作用是什么?
- A.提升所有样本的损失
- B.压低易样本损失、保留难样本损失← 正确答案
- C.加速模型收敛速度
- D.消除模型梯度消失
答案:B。当 $p_t$ 接近1(易样本)时,$(1-p_t)^\gamma$ 接近0,损失被压低;当 $p_t$ 小(难样本)时该因子接近1,损失保留。这保证难样本的梯度不会被海量易样本淹没。它并不统一提升损失,也不直接加速收敛或解决梯度消失。
Q7. 当 $C_{10}=9$、$C_{01}=1$ 时,理论最优决策阈值 $t^*$ 是多少?
- A.0.5
- B.0.1← 正确答案
- C.0.9
- D.0.25
答案:B。代入 $t^*=C_{01}/(C_{01}+C_{10})=1/(1+9)=0.1$。这意味着漏诊代价是误报的9倍时,模型应该把概率超过10%的样本都判为正类——宁可多收也不漏。0.5是代价对称时的阈值,0.9和0.25是干扰项。
Q8. 关于三种代价敏感方法的对比,正确的有?
- A.阈值移动计算开销最低← 正确答案
- B.MetaCost与具体模型无关← 正确答案
- C.Focal Loss只适用于决策树
- D.代价敏感决策树适合表格数据← 正确答案
答案:ABD。阈值移动只在预测阶段改阈值,几乎零成本,A正确。MetaCost是包装方法,可以用任何分类器作为基学习器,B正确。Focal Loss是损失函数,只能用于梯度可导的模型如神经网络,不适用决策树,C错误。代价敏感决策树在表格数据上可解释性强、效果好,D正确。
Q9. Focal Loss中的平衡因子 $\alpha_t$ 主要解决什么问题?
- A.梯度的调制因子过小
- B.正负类样本数量天然不平衡← 正确答案
- C.模型训练过拟合
- D.特征缩放不一致
答案:B。$\alpha_t$ 在每个样本的损失上乘以一个类别相关的权重(正类用α、负类用1-α),用来缓解正负类在数量上的巨大差异。调制因子解决的是难易样本权重,α解决的是类别数量不平衡,两者分工不同,B正确。
Q10. 在类别不平衡场景下,哪些评估指标比准确率更可靠?
- A.G-mean← 正确答案
- B.F1-score← 正确答案
- C.Accuracy
- D.基于代价矩阵的总代价← 正确答案
答案:ABD。准确率在类别不平衡时容易被多数类主导——全部判为多数类就能拿高分,C不选。G-mean是灵敏度和特异度的几何平均,F1-score综合了精确率与召回率,总代价直接用代价矩阵加权,三者都兼顾了少数类的表现。代价敏感学习的目标是降低总代价,因此用代价评估最贴合本意。