张医生经营一家智慧体检中心,他训练了一个 AI 分诊系统,每天自动判断上千份体检报告:体检者到底有没有患病。系统上线那天,张医生看到大屏上显示“准确率 95%”,非常满意。直到三个月后,一位曾被判定“未见异常”的体检者查出癌症晚期——张医生这才惊觉,光看一个“准确率”远远不够。 每个体检者其实有两种状态:真实是否患病,以及系统是否判定患病。这两者一交叉,就会出现四种结果:病人被正确发现、健康人被误判患病、病人被漏掉、健康人正确通过。把这四种结果摆进一张 2×2 的表格里,就得到混淆矩阵。它就像体检中心的分诊台账,一笔一笔记录着 AI 的判断。学会读这本台账,你就能知道模型到底错在哪、为什么错、下一步怎么改。

岗位关联

混淆矩阵是分类模型调优的“病历本”。掌握它,你就能精准定位模型短板,指导阈值调整与数据策略——这是 AI 工程师做模型诊断的核心基本功。

目录
  1. 可视化演示
  2. 1. 矩阵四格基础——分诊台的四个筐
  3. 2. 可视化读图——热力地图上的明暗线索
  4. 3. 失衡数据陷阱——准确率的障眼法
  5. 4. 阈值调优——松紧之间找平衡
  6. 5. 采样策略——补齐样本短板
  7. 6. 错误归因——顺着错误找病根
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示混淆矩阵热力图、错误归因分析、分类阈值调优FP/FN权衡及行归一化弱点诊断,侧边指标实时切换深入理解模型错误诊断全流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

混淆矩阵:非对角线揭示类间混淆模式 对角线为正确分类,非对角线为混淆错误 4和9互相混淆最严重,需重点优化 Accuracy = Σ(diagonal) / Σ(all) 混淆矩阵是模型错误诊断的核心工具。

1. 矩阵四格基础——分诊台的四个筐

张医生在分诊台旁放了四个塑料筐,护士每天把分诊结果按四种情况归类:第一个筐,系统判定“疑似患病”,复查后确认真的病了;第二个筐,系统判定“疑似患病”,复查却发现是健康的;第三个筐,系统判定“未见异常”,其实已经带病在身;第四个筐,系统判定“未见异常”,人也确实健康。一天下来,四个筐里的单子数量,就是分诊系统的“体检报告”。

在机器学习里,这四个筐有正式的名字:TP 真阳性、FP 假阳性、FN 假阴性、TN 真阴性。“阳性”指模型预测为正类,“真/假”指预测是否正确。把四个筐摆成一张表格——行代表真实状态,列代表模型预测——就是混淆矩阵。它之所以叫“混淆”,是因为矩阵能直观展示模型在哪些地方“混淆”了类别。

以医学筛查为例,把“患病”记为正类,把“健康”记为负类。矩阵左上角 TP 表示病人被正确检出,右上角 FP 表示健康人被误判,左下角 FN 表示病人被漏掉,右下角 TN 表示健康人正确通过。四格数字的分布,直接决定了模型的可靠性。

回到体检中心的故事:如果“漏诊”筐里的单子越来越多,张医生就知道系统的短板在于“太保守”,总把病人判成健康;如果“误报”筐爆满,则说明系统“太敏感”,把健康人吓得不轻。四个筐的比例,就是 AI 诊断的起跑线。

CM=[TPFPFNTN]CM = \begin{bmatrix} TP & FP \\ FN & TN \end{bmatrix}
CM 是 Confusion Matrix(混淆矩阵)的缩写。四个格子分别对应“分诊台账”的四种记录:检出、误报、漏检、放行。
  1. 矩阵符号 CMCM 代表整张混淆矩阵,是后续所有指标的计算源头。
    CMCM
  2. TP 真阳性真实为正类且预测为正类,相当于病人被正确检出。
    TPTP
  3. FP 假阳性真实为负类但预测为正类,相当于健康人被误报。
    FPFP
  4. FN 假阴性真实为正类但预测为负类,相当于病人被漏诊。
    FNFN
  5. TN 真阴性真实为负类且预测为负类,相当于健康人正确放行。
    TNTN

2. 可视化读图——热力地图上的明暗线索

张医生把三个月的分诊台账画成了一张热力图:数字大的格子颜色深,数字小的格子颜色浅。结果一眼就看出端倪——对角线上的两个格子颜色很深,说明大多数体检者的判断是对的;但左下角那个“漏诊”格子里,也有一小片不容忽视的暗红色。

在机器学习中,把混淆矩阵画成热力图是标配操作。横轴是预测类别,纵轴是真实类别,格子的颜色深浅代表样本数量。对角线(TP 和 TN 所在位置)越亮,说明模型整体越准;非对角线出现亮点,说明模型经常把某些类错判成另一些类。在多分类任务中,这种“类间混淆”尤其明显——比如把“猫”错判成“狗”。

一个实用的技巧是矩阵标准化:把每行的数字除以该行的总数,让每行归一化为 0 到 1 的比例。标准化之后,对角线上的数值直接就是“每一类的召回率”,角落里的数值则是“这一类被错分到哪一类”的比例。这样,即使各类样本量差异悬殊,也能一眼看出哪类最容易出错。

张医生的启发是:热力图不能只看整体亮度,更要盯着非对角线上的“亮点”。每一个亮点都是一条线索——哪两类在互相混淆、哪一类几乎被淹没,这些才是真正值得深挖的“病根”。

对角率=TP+TNTP+TN+FP+FN\text{对角率} = \frac{TP + TN}{TP + TN + FP + FN}
对角率就是对角线之和占总样本的比例,也就是我们常说的“准确率”。它只回答“整体对了多少”,不回答“每一类对了多少”。
  1. 分子 TP + TN所有被模型正确判定的样本,包括检出的病人和放行的健康人。
    TP+TNTP + TN
  2. 分母四格之和全部样本总数,无论判断正确与否。
    TP+TN+FP+FNTP + TN + FP + FN
  3. 比值即对角率整体正确率,但会被多数类主导,掩盖少数类的糟糕表现。
    TP+TNTP+TN+FP+FN\frac{TP + TN}{TP + TN + FP + FN}

3. 失衡数据陷阱——准确率的障眼法

有一天,张医生发现体检中心接待的 10000 人中只有 50 个真正的病人。分诊系统的准确率依然显示 99%,但他仔细一查,发现系统把所有来检者都判成了“未见异常”。因为绝大多数人本来就健康,全判健康自然“准确”。可那 50 个病人呢?一个都没找到。

这就是不平衡数据下的“准确率幻觉”:当负类(健康人)占压倒性多数时,模型只要无脑预测负类,就能拿到很高的准确率。真正该关心的正类(病人)却被完全忽略。准确率这个指标被淹没在庞大的 TN 中,成了数字游戏。

判断模型是否真的有用,要拿它和基线对比。所谓基线,就是“全部预测为多数类”时的准确率——它等于多数类占比。如果模型的准确率只比基线高一点点,说明模型几乎没有学到正类的特征。此时应该转而关注召回率(正类中有多少被找到),而不是被整体准确率蒙蔽。

张医生恍然大悟:他以前只看大屏上的“准确率 99%”,却不知道那 50 个病人在台账里全部躺在了“漏诊”的筐里。从此他立下规矩——每次看模型表现,必须先看混淆矩阵的四格分布,再决定信不信那个准确率。

Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}
在 10000 人只有 50 个病人的场景下,即使 TP 为 0,准确率也能高达 99.5%。所以准确率不是万能的,尤其在类别极不平衡时。
  1. 分子正确样本TP 加上 TN,即被正确检出的病人加上正确放行的健康人。
    TP+TNTP + TN
  2. 分母全体样本四格之和即所有来检者,无论判断是否正确。
    TP+TN+FP+FNTP + TN + FP + FN
  3. 不平衡的扭曲当 TN 接近总数时,即使 TP 为 0,准确率依然很高。
    Accuracy≈TNTN=99%\text{Accuracy} \approx \frac{TN}{TN} = 99\%

4. 阈值调优——松紧之间找平衡

张医生决定整改分诊系统。他发现在模型内部,每个体检者都会得到一个“疑似患病”的分数——比如 0 到 1 之间的风险值。系统默认 0.5 分以上才判“疑似患病”。他把分数线提到 0.8,误报少了,但漏诊变多了;把分数线降到 0.3,漏诊少了,误报却多了。分数线,就是分类器的阈值。

阈值这个旋钮,直接拨动着两个关键指标。精确率(Precision):在所有被判为患病的人中,真正有病的比例;召回率(Recall):在所有真实病人中,被成功找出的比例。阈值调高,模型更“谨慎”,预测为正例的把握更大,精确率上升,但召回率下降;阈值调低,模型更“激进”,尽量多抓病人,召回率上升,但误报也变多。

两个指标此消彼长,于是需要F1 分数——精确率和召回率的调和平均值。F1 越高,说明模型在“抓得准”和“抓得全”之间平衡得越好。实际业务中,漏诊和误报的代价往往不对等:癌症筛查漏掉一个病人的代价,远高于让一个健康人多做一次复查。这时候就该把阈值往低调,优先保召回率。

张医生最终把阈值从 0.5 调到 0.35,代价是误报增多,但他认为“让健康人多查一次,总比放过一个病人强”。他靠在椅子上想:阈值不是模型自带的圣旨,而是业务策略上的一个旋钮,想清楚代价,才能拧到合适的位置。

P=TPTP+FP,R=TPTP+FN,F1=2×P×RP+RP = \frac{TP}{TP + FP}, \quad R = \frac{TP}{TP + FN}, \quad F1 = \frac{2 \times P \times R}{P + R}
P 是精确率(Precision),回答“抓出来的人里有多少是真正有病的”;R 是召回率(Recall),回答“真正的病人里被抓出来了多少”;F1 是二者的调和平均,衡量综合平衡。
  1. 精确率 P分子是检出的真病人,分母是所有人的阳性预测,代表预测阳性的可信度。
    P=TPTP+FPP = \frac{TP}{TP + FP}
  2. 召回率 R分子是检出的真病人,分母是全部真实病人,代表病人被找到的比例。
    R=TPTP+FNR = \frac{TP}{TP + FN}
  3. F1 调和平均精确率和召回率的综合得分,惩罚“偏科”的模型。
    F1=2×P×RP+RF1 = \frac{2 \times P \times R}{P + R}

5. 采样策略——补齐样本短板

调完阈值,张医生又发现一个新问题:训练数据里 10000 份体检记录只有 50 份来自病人。模型在训练时见到的病人太少,很难学到病人的特征,难怪总是漏诊。于是他想:能不能让数据本身更平衡一些?

采样策略就是为此而生。随机欠采样:从多数类(健康人)中随机丢弃一部分,让两类数量接近。简单粗暴,但可能丢掉有价值的健康人信息。随机过采样:把少数类(病人)的样本复制几份,让模型多“看”几遍病人长什么样。实现容易,但也容易让模型死记硬背复制样本,导致过拟合。SMOTE 合成:更聪明的方法——在病人样本的“附近”通过插值创造全新的、合理的病人样本,既增加了数量,又避免了简单复制。

采样策略的选择要看数据规模和任务性质:如果多数类数据量本身就很大,欠采样代价不大;如果少数类样本太少且特征维度高,SMOTE 这类合成方法通常更稳健。采样是数据层面的平衡,与阈值调优是“两条腿走路”——前者改变训练分布,后者改变决策边界。

张医生用 SMOTE 给病人样本“合成”了一批虚拟病历后,分诊系统的漏诊率明显下降。他感叹:数据不平衡不是天生注定,靠采样策略给模型补课,往往比换模型结构更立竿见影。

n少数+n补=n多数,平衡比≈1n_{\text{少数}} + n_{\text{补}} = n_{\text{多数}}, \quad \text{平衡比} \approx 1
过采样的目标是让少数类样本数量补到接近多数类,使模型在训练时对两个类“一视同仁”。
  1. 原始少数类数量用 n_少数 表示病人样本的原始数量。
    n少数n_{\text{少数}}
  2. 补足至多数类需要补充的数量等于多数类减去少数类。
    n补=n多数−n少数n_{\text{补}} = n_{\text{多数}} - n_{\text{少数}}
  3. 平衡比趋近 1采样后两类样本量接近,模型不再被多数类带偏。
    n少数+n补n多数≈1\frac{n_{\text{少数}} + n_{\text{补}}}{n_{\text{多数}}} \approx 1

6. 错误归因——顺着错误找病根

采样和阈值都优化了,但张医生还想知道:模型在哪些人身上最容易犯错?他把混淆矩阵按行拆开,发现漏诊的病例中 60% 是老年人,而且这些老年人的体检报告都有一项共同特征——某项指标处于“灰色地带”,既不算异常也不算正常。模型正是在这些模糊地带失了手。

这就是错误归因:顺着混淆矩阵的非对角线元素,定位系统性错误的来源。具体做法是,对每一类样本,统计它被错分到了哪些目标类别,找出“最大混淆对”。然后再回到原始数据,检查这些错误样本的特征分布、标注质量、采集来源,判断问题出在哪:是特征不足(现有特征区分不开两个类),还是数据质量(标注错误、样本噪声),抑或是类间重叠(两个类别本身就界限模糊)。

错误归因是模型迭代中最有价值的一环,因为它把“模型不准”这个大问题,拆解成“具体哪一类、错到哪里、为什么错”的小问题。每一个小问题,都对应一个可执行的改进动作:加特征、清数据、补样本或改标注。

张医生在汇报会上摆出这张错误归因表:漏诊主要集中在老年人群体,根因是“灰色地带”特征不足。他据此给体检套餐新增了两项检测指标,模型的下一次迭代准确率又上了一个台阶。四个筐的故事至此闭环——从读台账,到找线索,再到治病根,混淆矩阵始终是那把最趁手的诊断工具。

Ei→j=CMij∑k≠iCMikE_{i \to j} = \frac{CM_{ij}}{\sum_{k \neq i} CM_{ik}}
E 表示第 i 类的错误中有多大比例被错分到了第 j 类。这个比例越高,说明这两类越需要针对性处理。
  1. 分子 CM_ij真实类别为 i 但被预测为 j 的样本数,即“混淆对”的数量。
    CMijCM_{ij}
  2. 分母所有错误第 i 类所有被错分的样本总数,即该行非对角线元素之和。
    ∑k≠iCMik\sum_{k \neq i} CM_{ik}
  3. 错误集中度比值越高,说明第 i 类的错误越集中在某一特定目标类上。
    CMij∑k≠iCMik\frac{CM_{ij}}{\sum_{k \neq i} CM_{ik}}

AI 应用场景

医疗影像筛查:肺结节 CT 检测

阶段:模型评估与迭代优化

解决的问题:肺结节 CT 筛查中,AI 模型漏掉小结节(FN 高)是致命问题。传统只看准确率,99% 的准确率下可能漏掉大量早期肿瘤。通过混淆矩阵定位到“微小实性结节”类别漏诊严重,据此调低判定阈值并补充该类别训练样本。

具体案例:某三甲医院 AI 辅助诊断系统上线后,放射科医生用混淆矩阵复盘发现 5mm 以下结节的召回率仅 61%,通过阈值从 0.5 调至 0.35 并过采样结节样本,召回率提升到 84%,而误报率仅小幅上升。

金融风控:信用卡欺诈检测

阶段:业务调优与风控策略

解决的问题:欺诈交易在千万级交易中占比不足 0.1%,准确率严重失真。混淆矩阵显示模型对新型欺诈模式的召回率极低,欺诈资金外流风险巨大。通过错误归因发现欺诈特征分布变化,结合 SMOTE 过采样和阈值调优,在误伤率可控范围内大幅提升召回率。

具体案例:某支付平台将基础模型召回率从 31% 提升至 68%,同时把误报率控制在 2% 以内,每年减少欺诈损失超千万元。

电商图像分类:商品类目自动打标

阶段:模型诊断与数据清洗

解决的问题:电商平台用视觉模型自动为商品分类,混淆矩阵发现“连衣裙”和“半身裙”互错率高达 27%。错误归因定位到标注不一致——部分商家把“半身裙”标为“连衣裙”。清洗标注数据后,两类各自准确率提升 15 个百分点。

具体案例:某电商平台对 200 万商品图片做分类诊断,通过行归一化混淆矩阵发现 3 组高频混淆对,针对性清理标注噪声后,整体分类准确率从 81% 升至 89%。

Python 演示

python48 行
import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import confusion_matrix, accuracy_scorefrom sklearn.metrics import precision_score, recall_score np.random.seed(42)X, y = make_classification(    n_samples=2000, n_features=10, n_informative=6,    n_redundant=2, weights=[0.9, 0.1], random_state=42) X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=42, stratify=y) model = LogisticRegression(max_iter=1000)model.fit(X_train, y_train)y_pred = model.predict(X_test) tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()print("=== 基线模型 ===")print("TN=%d FP=%d FN=%d TP=%d" % (tn, fp, fn, tp))print("准确率=%.3f 精确率=%.3f 召回率=%.3f" % (    accuracy_score(y_test, y_pred),    precision_score(y_test, y_pred),    recall_score(y_test, y_pred))) proba = model.predict_proba(X_test)[:, 1]y_low = (proba >= 0.3).astype(int)tn2, fp2, fn2, tp2 = confusion_matrix(y_test, y_low).ravel()print("\n=== 阈值降至0.3 ===")print("TN=%d FP=%d FN=%d TP=%d" % (tn2, fp2, fn2, tp2))print("召回率=%.3f 精确率=%.3f" % (    recall_score(y_test, y_low),    precision_score(y_test, y_low))) pos = X_train[y_train == 1]n_dup = (y_train == 0).sum() - (y_train == 1).sum()dup_idx = np.random.choice(len(pos), n_dup, replace=True)X_bal = np.vstack([X_train, pos[dup_idx]])y_bal = np.hstack([y_train, np.ones(n_dup)]) model.fit(X_bal, y_bal)y_bal_pred = model.predict(X_test)print("\n=== 过采样后 ===")print("召回率=%.3f 精确率=%.3f" % (    recall_score(y_test, y_bal_pred),    precision_score(y_test, y_bal_pred)))
目的:演示一个不平衡二分类任务中,如何通过混淆矩阵发现模型短板,再用“降阈值”和“过采样”两种手段提升召回率。
  1. weights=[0.9, 0.1]构造 90% 负类、10% 正类的不平衡数据集,模拟“健康人多病人少”的场景。
  2. confusion_matrix(y_test, y_pred).ravel()一次性解包出 TN、FP、FN、TP 四个值,正是混淆矩阵的四个筐。
  3. print("TN=%d FP=%d FN=%d TP=%d" % ...)先看四格分布,而不是只看准确率,这是诊断的第一步。
  4. model.predict_proba(X_test)[:, 1]取出每个样本被判为正类的概率,阈值旋钮就作用在这条分数线上。
  5. (proba >= 0.3).astype(int)把默认阈值从 0.5 下调到 0.3,模型更激进地抓正类。
  6. X_train[y_train == 1]把少数类(正例)样本单独取出来,用于过采样复制。
  7. np.random.choice(len(pos), n_dup, replace=True)从正例中有放回地随机抽取,复制出足够多的“虚拟病人”。
  8. np.vstack([X_train, pos[dup_idx]])把原始训练集和复制出的正例拼在一起,构成平衡后的训练数据。
  9. model.fit(X_bal, y_bal)用平衡数据重新训练模型,让它不再被多数类“淹没”。

常见误区

误区“我的模型准确率 99%,肯定没问题了。混淆矩阵什么的不用看。”在测试集上准确率很高,自然觉得一切完美。

正解在不平衡数据下,准确率会被多数类主导。比如 10000 个样本里 9900 个负类,模型全判负类也有 99% 准确率,但正类一个都没抓住。必须结合混淆矩阵看每一类的召回率,尤其关注少数类,才能判断模型是否真的有用。

为何常见:准确率是最直观、最常被宣传的指标,人天然容易被一个高数字说服。加上多数类样本量大,准确率高确实很容易达成,但“高”不代表“好”。

误区“混淆矩阵不就是拿来算准确率、精确率、召回率的吗?算完就完事了。”把它当成一个指标计算器。

正解混淆矩阵的核心价值是诊断。热力图上的非对角线亮点能告诉你“哪两类在互相混淆”,行归一化能告诉你“每一类的召回率”。这些信息远超单个标量的价值,是模型弱点定位和迭代方向的第一手依据。

为何常见:许多教程只把混淆矩阵作为“指标的中间计算工具”来介绍,导致学习者忽视了它本身的分析价值。

误区“模型输出大于 0.5 就算正类,这是模型的默认设置,不该去动它。”阈值被视为模型的一部分。

正解0.5 只是 sklearn 等库的默认值,不是唯一的正解。阈值应该根据业务代价来定:漏诊代价高就调低阈值保召回率,误报代价高就调高阈值保精确率。阈值是业务策略的旋钮,不是模型自带的真理。

为何常见:框架的默认参数会给人“官方预设即正确”的心理暗示,很少有人意识到决策阈值可以和模型参数分离独立调优。

误区“少数类样本少,我把它复制十份,模型就能学会了。”简单复制看似直接有效。

正解盲目复制会让模型在训练时反复看到相同样本,容易过拟合——它可能“背下”这些复制样本,而不是学到一般规律。更推荐 SMOTE 这类合成方法,在少数类样本之间插值生成新的、合理的样本,既增加数量又保留多样性。

为何常见:复制粘贴是日常生活里“增加数据”最直接的手段,这种思维惯性自然地迁移到了机器学习中。

面试题

Q1. 混淆矩阵中 TP 表示什么?

单选题 · easy

  • A.预测为正且实际为正← 正确答案
  • B.预测为正但实际为负
  • C.预测为负但实际为正
  • D.预测为负且实际为负

答案:A。TP 是 True Positive 的缩写,意为“真正例”。正类预测且预测正确。类比体检:病人被正确检出。B 是 FP(误报),C 是 FN(漏诊),D 是 TN(正确放行)。

Q2. 1000 个样本中只有 10 个正例,模型全部预测为负类,准确率是多少?

单选题 · easy

  • A.99% 但没抓住任何正例← 正确答案
  • B.50% 属于随机猜测水平
  • C.10% 说明模型几乎无效
  • D.90% 说明模型表现良好

答案:A。990 个负类全部预测正确,10 个正例全部漏掉,准确率 = 990/1000 = 99%。但这正是“准确率幻觉”:TP=0 时模型对正类毫无识别能力,准确率依然很高,因此必须看混淆矩阵而非单一准确率。

Q3. 体检分诊中“漏诊”对应混淆矩阵的哪一项?

单选题 · easy

  • A.假阴性 病人被误判为健康← 正确答案
  • B.假阳性 健康人被误判有病
  • C.真阳性 病人被正确检出
  • D.真阴性 健康人正确放行

答案:A。漏诊指真实有病但预测为无病,即“假阴性”FN。B 是误报(FP),C 是正确检出(TP),D 是正确放行(TN)。漏诊往往是不平衡问题中最危险的错误。

Q4. 精确率(Precision)的计算公式是?

单选题 · mid

  • A.TP÷(TP+FP) 预测为正中真正的正← 正确答案
  • B.TP÷(TP+FN) 正例中被找出的比例
  • C.TN÷(TN+FP) 预测为负中真正的负
  • D.TN÷(TN+FN) 负例中被找出的比例

答案:A。精确率回答“预测为正例的样本中有多少是真正的正例”,分母是 TP+FP。B 是召回率,C 是负类精确率,D 是负类召回率(特异度)。

Q5. 把分类阈值从 0.5 提高到 0.8,通常会导致什么?

单选题 · mid

  • A.召回率下降而精确率上升← 正确答案
  • B.召回率上升而精确率下降
  • C.精确率与召回率同时上升
  • D.精确率与召回率同时下降

答案:A。阈值调高意味着模型更“谨慎”,只有高分才判正类,预测为正例的把握更大,所以精确率上升;但同时漏掉更多正例,召回率下降。阈值是精确率与召回率之间的跷跷板。

Q6. 随机欠采样最大的风险是什么?

单选题 · mid

  • A.丢弃多数类有效信息造成偏差← 正确答案
  • B.生成虚假样本误导模型训练
  • C.训练时间显著成倍增加
  • D.模型复杂度指数级上升

答案:A。欠采样从多数类中随机丢弃样本,可能把有区分价值的边界样本丢掉,让模型学到的决策边界失真。B 是过采样/SMOTE 的风险,C 和 D 与欠采样无直接关系。

Q7. 欺诈检测中,漏掉一笔大额欺诈的损失远高于误伤普通用户,此时应优先?

单选题 · hard

  • A.提高召回率尽量抓全欺诈← 正确答案
  • B.提高精确率减少误伤用户
  • C.只追求准确率最大化
  • D.缩小训练集降低训练成本

答案:A。当“漏掉”的代价远大于“误报”时,应把策略重心放在召回率上——宁可多拦几笔正常交易,也不能放过欺诈。实践中可调低阈值或过采样欺诈样本。C 在不平衡数据下会陷入准确率幻觉。

Q8. 下列哪些指标可以直接从混淆矩阵的四格数值推导出来?

多选题 · mid

  • A.精确率 Precision← 正确答案
  • B.召回率 Recall← 正确答案
  • C.准确率 Accuracy← 正确答案
  • D.特征熵 Entropy

答案:ABC。精确率 = TP/(TP+FP),召回率 = TP/(TP+FN),准确率 = (TP+TN)/总数,三者都由 TP/FP/TN/FN 计算。特征熵是特征选择阶段的指标,与混淆矩阵无关。

Q9. 面对类别极不平衡的数据,下列哪些策略是有效的?

多选题 · hard

  • A.对少数类做 SMOTE 过采样← 正确答案
  • B.对多数类做随机欠采样← 正确答案
  • C.降低正类的判定阈值← 正确答案
  • D.提高梯度下降的学习率

答案:ABC。SMOTE 合成少数类样本、欠采样压缩多数类、调低阈值提升召回率,三种策略分别从数据分布和决策边界入手,都是平衡问题的常用解法。学习率只影响收敛速度,不解决类别不平衡。

Q10. 观察多分类混淆矩阵发现“猫”常被误判为“狗”,可能的根因有哪些?

多选题 · extreme

  • A.猫狗特征重叠、区分度不够← 正确答案
  • B.训练集中猫的样本数量偏少← 正确答案
  • C.部分猫图样本标注错误← 正确答案
  • D.模型隐藏层数过多导致过拟合

答案:ABC。类间特征相似(A)、样本不均衡(B)、标注噪声(C)都会导致具体的类间混淆,且都能通过错误归因定位。D 过拟合通常表现为整体验证集下降,而不会特定于“猫→狗”这一类混淆对。