混淆矩阵 (Confusion Matrix) 与 准确率 (Accuracy)

混淆矩阵是评估分类模型性能的基础工具,它清晰地展示了模型预测结果与真实结果之间的对比。准确率是最直观的指标,表示模型预测正确的样本占总样本的比例。

动手试试:

在下面的混淆矩阵中输入数字,观察各项指标如何实时变化。代码也会同步更新!

预测为正
预测为负
真实为正
真实为负
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 真实标签和预测标签 # y_true = [...] # y_pred = [...] # 假设从混淆矩阵得到... tp, fn, fp, tn = 85, 15, 10, 90 accuracy = (tp + tn) / (tp + fn + fp + tn) precision = tp / (tp + fp) recall = tp / (tp + fn) f1 = 2 * (precision * recall) / (precision + recall) print(f"准确率: {accuracy:.2%}") print(f"精确率: {precision:.2%}") print(f"召回率: {recall:.2%}") print(f"F1分数: {f1:.2%}")

准确率 (Accuracy)

87.50%

精确率 (Precision)

89.47%

召回率 (Recall)

85.00%

F1 分数 (F1 Score)

87.18%

精确率 vs. 召回率:一个生动的比喻

假设警察要抓一个城市里的 100 个坏人。精确率召回率是两种不同的办案策略:

精确率 (Precision) - “宁缺毋滥”

策略:只抓非常有把握的嫌疑人。抓了 10 个人,10 个都是坏人。

结果:精确率 = 10/10 = 100%。但是召回率 = 10/100 = 10%。90 个坏人被漏掉了。

关注点:在所有被预测为“正”的样本中,有多少是真正的“正”。适用于不能冤枉一个好人的场景,如垃圾邮件过滤。

召回率 (Recall) - “宁滥勿缺”

策略:把所有可疑人员都抓起来。抓了 200 个人,其中包含了全部 100 个坏人,但也冤枉了 100 个好人。

结果:召回率 = 100/100 = 100%。但是精确率 = 100/200 = 50%。一半抓的人是无辜的。

关注点:在所有真正的“正”样本中,有多少被成功预测出来了。适用于不能漏掉一个坏人的场景,如疾病诊断。

F1 分数是精确率和召回率的调和平均数,用于在两者之间寻求平衡。

ROC 曲线与 AUC

ROC 曲线 (Receiver Operating Characteristic curve) 是一种评估二元分类器性能的图表。它展示了在不同决策阈值下,真正例率 (TPR, 即召回率)假正例率 (FPR) 之间的权衡关系。AUC (Area Under the Curve) 是 ROC 曲线下的面积,其值越接近 1,表示模型性能越好。

from sklearn.metrics import roc_curve, auc # y_true: 真实标签 # y_scores: 模型预测为正类的概率 fpr, tpr, thresholds = roc_curve(y_true, y_scores) roc_auc = auc(fpr, tpr) # 绘制 ROC 曲线 # ...

真正例率 (TPR)

0.00

假正例率 (FPR)

0.00