0Pricing
Learn AI with Python · 课时

分类指标深入解析

混淆矩阵、精确率、召回率、F1、ROC-AUC 和 PR 曲线——选择合适的指标

分类指标深入解析 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

准确率并非全部

准确率是预测正确的比例,但在类别不平衡的数据上可能产生误导。一个只预测多数类的模型可能达到 99% 的准确率,却无法有效识别少数类。

混淆矩阵

混淆矩阵会将预测结果分为真阳性、假阳性、真阴性和假阴性。它是其他所有指标的基础。

from sklearn.metrics import confusion_matrix

y_true = [0, 1, 1, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1, 1]
print(confusion_matrix(y_true, y_pred))
# rows = actual, columns = predicted

精确率

精确率 = TP / (TP + FP)。在所有被预测为阳性的项目中,有多少确实是阳性?精确率高意味着误报很少。当误报代价高昂时,这一指标非常重要(例如垃圾邮件过滤器)。

from sklearn.metrics import precision_score

print(precision_score(y_true, y_pred))

召回率

召回率 = TP / (TP + FN)。在所有实际为阳性的项目中,我们捕获了多少?召回率高意味着漏报很少。当漏报代价高昂时,这一指标非常重要(例如疾病筛查)。

from sklearn.metrics import recall_score

print(recall_score(y_true, y_pred))

F1 得分

F1 得分是精确率和召回率的调和平均数:2 * P * R / (P + R)。它能平衡两者,在类别不平衡的数据上需要用一个单一数值进行评估时非常有用。

from sklearn.metrics import f1_score, classification_report

print(f1_score(y_true, y_pred))
print(classification_report(y_true, y_pred))

ROC 曲线与 AUC

ROC 曲线会在不同阈值下绘制真阳性率与假阳性率。roc_auc_score 会对其进行概括:1.0 表示完美,0.5 表示随机猜测。

from sklearn.metrics import roc_auc_score

# needs probability scores, not hard labels
proba = model.predict_proba(Xte)[:, 1]
print(roc_auc_score(yte, proba))

精确率-召回率曲线

PR 曲线会在不同阈值下绘制精确率与召回率。类别高度不平衡时,它比 ROC 更有信息量,因为它专注于阳性类别。

from sklearn.metrics import precision_recall_curve

prec, rec, thresh = precision_recall_curve(yte, proba)
# plot rec (x) vs prec (y) to see the tradeoff

平均精确率

average_precision_score 会将 PR 曲线概括为一个数值(PR 曲线下面积)。它是二分类类别不平衡问题首选的概括指标。

from sklearn.metrics import average_precision_score

print(average_precision_score(yte, proba))

ROC AUC 与平均精确率

在类别不平衡的数据上,ROC AUC 可能显得过于乐观,因为真阴性占主导地位。平均精确率忽略真阴性,因此能更真实地反映少数阳性类别上的性能。

选择正确的指标

对于类别不平衡的问题,请使用 F1 或平均精确率。对于类别均衡的数据排序质量,请使用 ROC AUC。误报代价高时选择精确率,漏报代价高时选择召回率。选择指标前,请始终明确您的优先目标。

调节阈值

大多数指标都取决于决策阈值(默认值为 0.5)。移动阈值时,您需要在精确率和召回率之间进行权衡。请使用 PR 曲线选择一个满足业务需求的阈值。

import numpy as np

# pick threshold for at least 0.9 precision
idx = np.argmax(prec >= 0.9)
chosen = thresh[idx]
preds = (proba >= chosen).astype(int)

快速检查

测试您对评估指标的理解。

回顾

回顾:从 confusion_matrix 开始。精确率会惩罚误报,召回率会惩罚漏报,F1则平衡两者。roc_auc_score 衡量排序质量;对于类别不平衡的数据,average_precision_score 和 PR 曲线更合适。请调节阈值,使其符合您的优先目标。

常见问题解答

「分类指标深入解析」课时是免费的吗?

是的 — 「分类指标深入解析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「分类指标深入解析」这节课中我会学到什么?

混淆矩阵、精确率、召回率、F1、ROC-AUC 和 PR 曲线——选择合适的指标 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「分类指标深入解析」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 交叉验证策略
  2. 分类指标深入解析
  3. 网格搜索与随机搜索
  4. 使用 Optuna 进行贝叶斯优化
← 返回 Learn AI with Python