分类指标深入解析
混淆矩阵、精确率、召回率、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 反馈 — 无需本地设置。
此课程中的所有课时
- 交叉验证策略
- 分类指标深入解析
- 网格搜索与随机搜索
- 使用 Optuna 进行贝叶斯优化