模型训练完了,怎么知道它到底行不行?「准确率 95%」听起来很好, 可如果 95% 的样本本来就是同一类,这个数字一文不值。 这一页把混淆矩阵、ROC、PR 和交叉验证四样东西摆在一起, 让你拖动阈值、切换场景,亲眼看它们怎么互相打架。
roc_auc_score 不需要传阈值——它把所有阈值都考虑完了。
分类只有「正/负」两种预测和两种真实,两两组合就是四个格子。 准确率把四个格子揉成一个数,代价是把两类错误的不同后果抹平了:
精确率问「你说是正例的,有多少真是」,召回率问「真正的正例,你抓到了多少」。 把阈值调低,召回率必然上升、精确率必然下降——这不是缺点,是定义决定的。 是两者的调和平均, 用来在必须给一个数的时候兼顾两边。
与其纠结一个阈值,不如把阈值从 +∞ 降到 −∞,每走一步记下 (假正率, 召回率):
曲线下的面积就是 AUC,它有一个很好用的概率解释: 随机抽一个正例和一个负例,模型给正例的分数更高的概率。 所以 AUC = 0.5 就是瞎猜,与阈值无关——换阈值只让你在曲线上滑动,不改变面积。
FPR 的分母里有 。负例极多时, 即使冒出一大批假正例, 看起来仍然很小, ROC 曲线照样很漂亮。PR 曲线的分母只有真正例和假正例,藏不住。 所以做稀有病筛查、欺诈检测这类任务,优先看 PR。
把数据切一份当测试集,得到的分数本身也是随机的。 K 折是把数据切成 K 份,轮流让每一份当验证集、其余当训练集,得到 K 个分数:
重点不是均值,是标准差——它告诉你这个模型的成绩有多不稳。 另外,分类任务要用分层切分:保证每折的类别比例与整体一致, 否则某一折里可能一个正例都没有。
drop_intermediate=True),
乳腺癌那 570 个点会被压成 42 个——形状完全一样,只是更省。