尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

速通机器学习 04 | 模型评估之混淆矩阵

速通机器学习 04 | 模型评估之混淆矩阵 专栏前言在上一节中我们完成了逻辑回归实战并使用准确率score()简单评判模型效果。然而在样本不均衡场景下准确率存在巨大的欺骗性。以信用卡欺诈数据集为例99.9% 的交易都是正常交易仅少数属于欺诈。如果模型无脑地将所有样本预测为正常准确率依然接近 99.9%但实际上完全无法识别欺诈行为。要客观评价分类模型我们需要掌握混淆矩阵。混淆矩阵适用于二分类和多分类任务。本章将先以二分类场景讲解原理再给出完整可运行代码并结合信用卡欺诈案例进行实操演示。4.1 什么是混淆矩阵混淆矩阵是适用于所有分类模型的基础评估工具。二分类只是它最简单的使用场景图像多分类、文本多标签等任务同样适用。其核心思想是按照样本的真实标签和模型的预测标签进行统计。矩阵的行代表真实类别列代表预测类别每个单元格中的数字代表属于对应类别的样本数量。4.1.1 二分类场景本章案例我们先约定案例定义正类 (1)欺诈交易负类 (0)正常交易表格名称全称含义TN真负例真实正常 (0)预测正常 (0)的个数FP假正例真实正常 (0)预测欺诈 (1)的个数FN假负例真实欺诈 (1)预测正常 (0)的个数TP真正例真实欺诈 (1)预测欺诈 (1)的个数4.1.2 由混淆矩阵计算四大评估指标二分类准确率 Accuracy全部样本中预测正确的比例短板样本不均衡场景极易产生误导。2.精确率 Precision所有被模型预测为正类的样本中真正属于正类的比例。含义判定为欺诈的交易里到底有多少真的是欺诈。3.召回率 Recall查全率所有真实正类样本中被模型成功识别出来的比例。欺诈场景重点指标召回率低 大量欺诈漏检带来资金风险。4.F1-score精确率和召回率的调和平均数平衡两个指标综合评价模型。补充多分类任务中会使用宏平均、加权平均方式汇总所有类别的 Precision、Recall、F1。4.1.3 模型评估思考在模型评估阶段我们不能仅仅依靠准确率来衡量模型性能。较高的准确率并不能保证模型在落地业务后具备实用价值。以银行欺诈识别系统为例仅参考准确率存在严重缺陷。一旦模型将欺诈交易标签1错误地判定为正常交易标签0发生欺诈漏检就会给银行带来巨大的经济损失。因此该业务场景需要重点关注欺诈类别的召回率即真实欺诈样本被模型正确识别为欺诈的概率。4.1.4 代码实现我们从 sklearn 库导入相关工具from sklearn.metrics import confusion_matrix, classification_report调用方式print(confusion_matrix(真实标签,预测标签))运行后输出二维数组形式的混淆矩阵。二分类任务输出格式行代表真实标签列代表预测标签。# 输出分类评估报告 print(classification_report(y_true, y_pred))输出样例报告自动计算精确率、召回率、F1 分数同时在文末给出整体准确率也就是我们所说的四大评估指标。注意confusion_matrix、classification_report基于 predict () 预测标签阈值 0.54.2 完整代码实现改代码是在前一章节中更改的这里不在过多叙述。数据集也可以通过前一章节下载速通机器学习 03 | 逻辑回归信用卡欺诈识别实战-CSDN博客import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, classification_report 解决Matplotlib中文乱码 plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False def plot_confusion_matrix(y_true, y_pred): 绘制混淆矩阵热力图 y_true样本真实标签 y_pred模型预测标签 函数同时支持二分类、多分类任务 cm confusion_matrix(y_true, y_pred) fig, ax plt.subplots() im ax.imshow(cm, cmapplt.cm.Blues) plt.colorbar(im) # 在每个格子填充数值 for i in range(cm.shape[0]): for j in range(cm.shape[1]): ax.text(j, i, cm[i, j], hacenter, vacenter, fontsize12) ax.set_xlabel(预测标签) ax.set_ylabel(真实标签) ax.set_title(混淆矩阵热力图) plt.show() 1、数据读取与预处理 data pd.read_csv(rD:\pythoncode2\bigdata_ai40\机械学习\data\creditcard_data.csv) 删除无用时间特征Time data data.drop(Time, axis1) Amount金额字段标准化 scaler StandardScaler() data[Amount] scaler.fit_transform(data[[Amount]]) 分离特征与标签 X data.drop(Class, axis1) y data[Class] 2、划分训练集、测试集 stratifyy 分层抽样保证正负样本比例和原始数据集一致不均衡数据必加 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.3, random_state42, stratifyy ) 3、训练逻辑回归模型 max_iter1000 防止梯度下降迭代不足无法收敛 lr_model LogisticRegression(C0.1, max_iter1000) lr_model.fit(X_train, y_train) 输出训练集、测试集准确率 train_acc lr_model.score(X_train, y_train) test_acc lr_model.score(X_test, y_test) print(f训练集准确率{train_acc:.4f}) print(f测试集准确率{test_acc:.4f}) print(- * 60) 4、预测并生成混淆矩阵 y_pred lr_model.predict(X_test) 打印原始混淆矩阵数组 cm_result confusion_matrix(y_test, y_pred) print(混淆矩阵二维数组) print(cm_result) print(- * 60) 输出分类报告四大指标准确率、精确率、召回率、F1分数 print(分类评估报告) print(classification_report(y_test, y_pred)) 绘制可视化混淆矩阵 plot_confusion_matrix(y_test, y_pred)画混淆矩阵的自定义函数是通用模板不管是二分类还是多分类都可以使用。输出样例4.3总结本章我们从逻辑回归的准确率陷阱出发引出了分类模型评估中必不可少的工具——混淆矩阵。混淆矩阵通过统计真实标签和预测标签的对应关系将模型的表现拆解为 TN、FP、FN、TP 四种基础计数为后续指标的计算奠定了坚实基础。基于混淆矩阵我们进一步学习了四大核心评估指标准确率整体正确比例、精确率预测为正的样本中有多少真正、召回率真实正样本中有多少被正确识别和F1-score精确率与召回率的调和平均。在实际业务场景中尤其是在信用卡欺诈识别这类样本不均衡任务里召回率往往是比准确率更关键的指标因为它直接关系到模型能否有效减少欺诈漏检带来的经济损失。最后我们结合信用卡欺诈数据集使用sklearn.metrics中的confusion_matrix和classification_report完成了完整的代码实战并借助自定义的可视化函数将混淆矩阵直观呈现。掌握这些工具和方法后读者可以将其灵活迁移到其他二分类或多分类评估任务中真正建立起严谨、全面的模型评估体系。
返回列表