速通机器学习 05 | K折交叉验证 + 超参数选择(信用卡欺诈实战)

📅 2026/8/4 5:15:30
速通机器学习 05 | K折交叉验证 + 超参数选择(信用卡欺诈实战)
前言欢迎回到《速通机器学习》系列前面我们训练模型时仅仅单次划分训练集、测试集存在明显缺陷数据集划分具有随机性。运气好划分效果好模型指标很高运气差划分糟糕评估结果失真无法客观反映模型真实性能。同时我们在逻辑回归中接触到超参数C人工盲目挑选参数效率很低。本章学习K 折交叉验证解决两个核心问题稳定、客观评估模型效果降低数据集随机划分带来的误差结合交叉验证完成超参数挑选选出最优正则系数 C重要规范绝对不能使用测试集参与调参流程标准训练集内部使用 K 折交叉验证筛选超参数找到最优参数后只用测试集做一次最终性能评估。5.1 什么是 K 折交叉验证在进行交叉验证前首先将完整数据集划分为训练集和独立测试集测试集全程隔离不参与任何训练与调参过程。数据集拆分仅将训练集均匀划分为 K 个子集K折严格保留测试集完整数据不作任何拆分用于最终模型效果验证。循环交叉训练轮流选取其中1个子集作为验证集剩余 K-1 个子集合并作为训练数据迭代训练模型。指标综合评估完整循环 K 次后会得到 K 组模型评估指标对所有指标求取平均值以此作为模型的综合性能分数规避单次数据划分带来的偶然性误差。超参数择优遍历多组候选超参数通过K折交叉验证对比各组参数的平均性能指标筛选出适配当前数据集的最优超参数。模型最终训练与验证确定最优超参数后使用完整训练集重新训练最终模型再用全程隔离的独立测试集模拟真实业务场景完成最终性能测试。业务提醒交叉验证只是在训练集内部进行评估调参测试集全程隔离仅作为最终模拟真实线上数据。k折代码实现核心API代码实现首先导入交叉验证核心工具库from sklearn.model_selection import cross_val_score标准调用语法score cross_val_score(model, X, y, cv, scoring)参数详细说明model待训练的机器学习模型本文为逻辑回归模型X训练集全部特征数据y训练集对应标签数据cv交叉验证折数代表将训练集均匀拆分的份数scoring模型评估指标常用参数包含recall召回率、precision精确率、f1综合分数、roc_auc曲线面积等可根据业务场景灵活选择函数返回值返回包含 K 次交叉验证评估结果的数组数组长度与设置的折数 cv 一致后续可通过均值计算得到模型综合性能分数。5.2 实战分步讲解三段式调参前→K折调参→择优训练本节结合信用卡欺诈数据集将K折交叉验证超参数优选流程拆分为调参前数据准备、K折交叉验证选参、最优参数模型训练验证三个核心阶段逻辑清晰、贴合工业建模规范。改代码是根据前一章节银行辨别欺诈系统改进的所以省略部分代码讲解可查看前一章节详细解答https://blog.csdn.net/2302_80153357/article/details/163374899?spm1011.2415.3001.53315.2.1 第一阶段K折调参前准备数据预处理数据集隔离核心原则测试集全程隔离仅用纯训练集做交叉验证调参杜绝数据泄露保证模型泛化能力真实可靠。主要工作完成数据清洗、特征标准化、分层数据集划分为后续调参提供干净、均衡的数据集。完整代码实现如下import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split, cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, confusion_matrix # 解决matplotlib中文乱码 plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False # 混淆矩阵绘制函数 def cm_plot(y_true, y_pred): 绘制混淆矩阵热力图 cm confusion_matrix(y_true, y_pred) fig, ax plt.subplots() im ax.matshow(cm, cmapplt.cm.Blues) plt.colorbar(im) # 填充单元格数字 for x in range(cm.shape[0]): for y in range(cm.shape[1]): ax.annotate(cm[x, y], xy(y, x), hacenter, vacenter) plt.ylabel(真实标签) plt.xlabel(预测标签) return plt # 1.数据读取与预处理 data pd.read_csv(rD:\pythoncode2\bigdata_ai40\机械学习\data\creditcard.csv) # 删除无用时间特征 data data.drop(Time, axis1) # 对量纲差异大的金额字段标准化 scaler StandardScaler() data[Amount] scaler.fit_transform(data[[Amount]]) # 2.划分特征与标签 X data.drop(Class, axis1) y data[Class] # 3.分层划分训练集、独立测试集 # stratifyy 保证不平衡数据正负样本比例一致测试集全程不参与调参 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.3, random_state42, stratifyy )阶段核心要点仅X_train、y_train用于后续K折交叉验证调参X_test、y_test 彻底封存只用于最后一次模型最终评估分层抽样stratifyy是不平衡数据集建模的必备操作5.2.2 第二阶段K折交叉验证核心遍历超参数参数详解本阶段核心目的遍历多组正则化超参数C通过8折交叉验证筛选出适配欺诈识别场景的最优参数。我们优先以召回率为评估标准减少欺诈漏检。K折交叉验证核心代码如下# 定义逻辑回归超参数候选范围 c_param_range [0.01, 0.1, 1, 10, 100] recall_mean_list [] # 遍历每一组超参数执行K折交叉验证 for c in c_param_range: # 初始化逻辑回归模型 lr LogisticRegression(Cc, solverlbfgs, max_iter1000) # K折交叉验证核心代码 score_array cross_val_score(lr, X_train, y_train, cv8, scoringrecall) # 计算K折平均召回率 avg_recall score_array.mean() recall_mean_list.append(avg_recall) print(fC{c}交叉验证平均召回率{avg_recall:.4f}) # 筛选交叉验证效果最优的超参数 best_c c_param_range[np.argmax(recall_mean_list)] print(*50) print(f交叉验证筛选得到最优惩罚系数 C {best_c})核心参数完整解析cv88折交叉验证将训练集均匀拆分为8份轮流训练验证结果更稳定规避单次划分偶然性误差scoringrecall指定评估指标为召回率贴合信用卡欺诈业务优先保证不漏检欺诈样本C逻辑回归正则化超参数C越小正则约束越强抑制过拟合效果越好max_iter1000增大梯度下降迭代次数避免模型训练不收敛报错阶段核心逻辑每组超参数都会得到一组平均泛化性能通过对比所有参数的指标选出适配数据集的最优参数替代人工盲目调参。5.2.3 第三阶段最优参数确定后模型训练与最终验证找到最优超参数后不再修改参数使用完整训练集训练最终模型最后用全程隔离的测试集模拟真实业务数据完成模型最终评估全程遵循「训练调参、测试验收」的工业建模规范。最终模型训练与评估代码如下# 使用交叉验证筛选出的最优超参数训练最终模型 best_lr LogisticRegression(Cbest_c, solverlbfgs, max_iter1000) best_lr.fit(X_train, y_train) # 1.训练集模型评估 train_pred best_lr.predict(X_train) print(\n【训练集评估报告】) print(classification_report(y_train, train_pred)) cm_plot(y_train, train_pred).show() # 2.独立测试集最终评估仅使用一次模拟线上真实效果 test_pred best_lr.predict(X_test) print(\n【测试集最终评估报告】) print(classification_report(y_test, test_pred, digits6)) cm_plot(y_test, test_pred).show()阶段核心规范最优参数只由训练集K折验证结果决定不参考任何测试集数据测试集仅用于最终效果验收全程只使用一次保证评估结果真实可信结合分类报告、混淆矩阵双重评估规避单一准确率的欺骗性逻辑回归参数C正则化系数值越小正则化越强抑制过拟合效果越好。我们通过 K 折交叉验证遍历一组候选 C 值选择交叉验证平均召回率最高的超参数欺诈场景优先召回率。核心注意点1.杜绝数据泄露测试集必须全程隔离仅用于最终模型验收绝对不能参与K折交叉验证与超参数调参否则模型泛化结果虚高、上线失效。2.指标按需选择评估指标不能固定需贴合业务场景。风险类场景优先召回率精准审核场景优先精确率综合场景选用F1、AUC指标。3.适配不平衡数据面对正负样本不均衡数据集必须搭配分层抽样划分数据集保证每折数据类别比例均衡避免评估失真。4.方法具备通用性K折交叉验证不局限于逻辑回归适配所有机器学习模型是通用的模型评估、超参数优选方法。本章总结本章主要讲解了K折交叉验证的原理与超参数调优实战。K折交叉验证是通用的机器学习评估方法适用于所有模型不局限于逻辑回归可用于各类模型的性能评估与超参数筛选。相比单次数据集划分该方法可有效降低随机误差让模型评估结果更稳定可靠。工业建模中需遵循「训练集交叉验证调参、测试集最终验收」的标准流程结合业务场景选择合适评估指标提升模型泛化与落地效果。