007.鸢尾花案例model自身评分
文章目录
#4.1-模型评估,model自身评分(正确率)print(model.score(x_test,y_test))#细节点是,参数为:x的数据+y的数据print(model.predict_proba(x_test))# 问题2:正确率一条就能评估模型的好坏么?
#4.2-模型测试(验证)+评估y-pre=model.predict(x_test)#x_test是要预测的特征,y-pre是预测的结果,y_test是真实的结果print(accuracy_score(y_pre,y_test))#细节点是,参数是:预测的结果+真实的结果
一、 代码细节深度剖析(针对你的笔记纠偏与填充)
首先,我们先把你笔记里的代码细节“校准”一下,防止面试时被揪出底层逻辑错误:
| 你的笔记代码 | 面试官真正想听的底层细节 |
|---|---|
model.score(x_test, y_test) |
分类任务:默认返回 Accuracy(准确率);回归任务:默认返回 R²(决定系数)。面试时一定要主动说清楚这一点,说明你懂多态。 |
predict_proba(x_test) |
返回的是 概率矩阵(每行是样本,每列是对应类别的概率)。面试追问:为什么有了 predict 还要它?答:为了画 ROC 曲线 和计算 AUC,因为 AUC 依赖概率排序,而非硬分类结果。 |
accuracy_score(y_pre, y_test) |
参数顺序纠正:sklearn.metrics.accuracy_score 的标准签名为 (y_true, y_pred),即真实值在前,预测值在后。虽然调换位置在数值上一样(因为是对称比较),但**面试时务必写成 accuracy_score(y_test, y_pre)**,体现你对 API 规范的严谨性。 |
二、 核心灵魂拷问:正确率(Accuracy)一条就能评估模型好坏么?
标准回答(斩钉截铁):绝对不能! 准确率是“最危险的单一指标”。
面试官必举的反例(癌症诊断 / 信用卡欺诈):
场景:10000 个样本中,只有 1 个是癌症(正例),9999 个是健康(负例)。
垃圾模型:直接无脑把所有样本预测为“健康”。
计算结果:准确率 = 9999 / 10000 = 99.99%(看起来极其完美)。
实际结果:那个唯一的癌症患者被漏诊了(召回率 = 0),这模型在临床上毫无价值。
结论:当数据存在严重类别不平衡(Class Imbalance),或者不同类别的误判代价天差地别时,准确率完全失效。
三、 面试加分项:模型评估的“四大金刚”指标(务必全盘掌握)
当面试官问“那你用什么替代准确率?”时,请立刻抛出混淆矩阵(Confusion Matrix)衍生出的四大指标:
1. 先画出混淆矩阵(极简记忆法)
| 真实 \ 预测 | 预测为正(1) | 预测为负(0) |
|---|---|---|
| 真实为正(1) | TP(真阳) | FN(假阴) —— 漏报 |
| 真实为负(0) | FP(假阳) —— 误报 | TN(真阴) |
2. 四大核心指标详解(面试必背公式)
- 精确率(Precision) = ( \frac{TP}{TP + FP} )
- 白话:模型判为正例的样本中,有多少个是真正对的?
- 场景:垃圾邮件拦截(宁可漏拦几封,也不能把老板的重要邮件扔进垃圾箱,误报代价极高)。
- 召回率(Recall / 灵敏度) = ( \frac{TP}{TP + FN} )
- 白话:所有真正的正例中,模型找回了多少个?
- 场景:癌症筛查(宁可误报让患者多做一次检查,也不能漏掉任何一个病人,漏报代价极高)。
- F1-Score(调和平均数) = ( 2 \times \frac{Precision \times Recall}{Precision + Recall} )
- 白话:当 Precision 和 Recall 打架时(此消彼长),用 F1 综合评判。
- 细节:调和平均会惩罚极端值,只有两者都高时 F1 才高。
- AUC-ROC(曲线下面积) —— 面试官最爱的高级话题
- 白话:ROC 曲线横轴是 FPR(假阳率),纵轴是 TPR(真阳率)。AUC 是曲线下面积。
- 优势:不依赖分类阈值,衡量模型将正样本排在负样本前面的能力。AUC 越接近 1,排序能力越强。
- 避坑:AUC = 0.5 等于随机猜,AUC < 0.5 说明模型在反向预测(比随机还差)。
四、 怎样做才算“比较准确”的模型评估?(工业界 SOP)
你不能只算一次指标就结束,面试官要的是你的严谨流程:
1. 数据划分必须分层(Stratified Split)
- 用
StratifiedKFold(分层 K 折交叉验证)代替简单的train_test_split。 - 原因:保证每一折训练集和验证集中,正负样本的比例与原数据集完全一致,防止随机切分导致某一折全是负样本,让指标剧烈抖动。
2. 不仅看均值,更要看方差(稳定性)
- 做 5 折交叉验证,输出 5 个 Accuracy 或 5 个 F1。
- 评估维度:既要看平均值(决定上限),也要看标准差(决定稳定性)。如果 5 个 F1 是 [0.98, 0.97, 0.96, 0.55, 0.54],均值尚可但方差极大,说明模型极不稳定,绝对不敢上线。
3. 必须看业务代价矩阵(Cost Matrix)—— 终极大招
- 在面试中亮出这一句,直接封神:
“统计指标只是中间产物,最终决策要引入代价敏感学习(Cost-Sensitive)。比如在风控场景,FP(把好人误判为坏人)的代价是流失一个客户,FN(把坏人放进去)的代价是损失一笔巨款。我会把这两个代价量化(比如 FN 代价是 FP 的 100 倍),然后去选择使总代价(Total Cost)最小的那个阈值,而不是机械地取 F1 最高点。”
五、 场景题:给你一个极度不平衡的数据集,你怎么办?
面试官:正例只有 1%,负例 99%,你怎么选指标和评估策略?
你的满分组合回答:
第一步(选指标):绝对不看 Accuracy。我会把焦点锁定在 Precision-Recall 曲线下的面积(PR-AUC),而不是 ROC-AUC。因为当负例极多时,ROC-AUC 容易虚高(FP 少量增加但 FPR 变动极小),而 PR-AUC 对正例极其敏感,更能反映少数类的表现。
第二步(重采样):在训练时配合 SMOTE(合成少数类过采样) 或 Focal Loss(焦点损失),削弱大量负例带来的主导梯度。
第三步(评估验证):严格使用 Stratified K-Fold,确保每一折都有正例。最终模型选型依据 F1-Score 和业务设定的 最小召回率阈值(比如强制要求召回率不得低于 85%)。
六、 最终精简版面试记忆卡片(可直接背诵)
Q:模型评估怎么做才准确?只用准确率行不行?
A: 绝对不行。准确率在样本不平衡时是“虚假的繁荣”。
- 必须看混淆矩阵:衍生出 精确率(Precision)(防误报)、召回率(Recall)(防漏报)和 F1(两者的调和综合)。
- 必须看排序能力:用 AUC-ROC 衡量模型对正负样本的区分排序能力,它不依赖人为设定的分类阈值。
- 必须交叉验证:用 分层 K 折(StratifiedKFold) 计算指标的均值 ± 标准差,确保模型在不同数据切片下表现稳定。
- 最终落地看代价:结合业务量化 FP(误报) 和 FN(漏报) 的具体损失,选取使业务总成本最低的阈值,而不是机械取 0.5。
- 极端不平衡题选型:采用 PR-AUC(精确率-召回率曲线) 替代 ROC-AUC,因为它在负例极多的场景下更加严苛且真实。
回归任务的评估指标(MSE、RMSE、MAE、R²) ……