实战案例|K折交叉验证与GridSearch网格搜索

简介: 大家好,我是志斌~今天跟大家分享一下如何用GridSearch网格搜索和K折交叉认证对决策树模型进行参数调优。

大家好,我是志斌~


今天跟大家分享一下如何用GridSearch网格搜索和K折交叉认证对决策树模型进行参数调优。


上一篇文章给大家介绍了决策树模型的搭建和实战,当时只用到了一个参数max_depth,但是模型实际上还有其他影响参数,如criterion(特征选择标准)、class_weight(类别权重)等参数。如果我们想要更精确的结果,那么势必要对模型参数进行调整,找到最优参数,来构建模型。


01K折交叉验证


K折交叉验证实际上是将一个数据集分成K份,每次选K-1份为训练集,用剩下的一份为测试集,然后取K个模型的平均测试结果作为最终的模型效果。如下图所示:


74.png


K值的选取跟数据集的大小有关,数据集较小则增大K值,数据集较大则减小K值。实现代码如下:


from sklearn.model_selection import cross_val_score
acc = cross_val_score(model,X,Y,cv=5)


02GridSearch网格搜索


GridSearch网格搜索是一种穷举搜索的参数调优方法,它会遍历所有的候选参数,并评估每个模型的有效性和准确性,选取最好的参数作为最终结果。


参数调优分为单参数调优和多参数调优,志斌分别给大家举例介绍一下。


01 单参数调优


我们以单参数max_depth参数为例,来演示单参数调优,代码如下:


from sklearn.model_selection import GridSearchCV
param = {'max_depth':[1,3,5,7,9]}
grid_search = GridSearchCV(model,param,scoring='roc_auc',cv=5)grid_search.fit(X_train,Y_train)


输出参数的最优结果:


grid_search.best_params_


得到max_depth参数的最优结果为:


75.png


我们用上面获得的参数最优值重新搭建模型,来查看AUC值是否得到了提高,代码如下:


model = DecisionTreeClassifier(max_depth=7)
model.fit(X_train,Y_train)
y_pred_proba = model.predict_proba(X_test)
from sklearn.metrics import roc_auc_score
score = roc_auc_score(Y_test.values,y_pred_proba[:,1])


得到的AUC值为:


76.png

76.png


比之前的0.958有所上升,看来模型的准确度有所上升。


02

多参数调优


决策树模型有下图这些参数:


77.png


这些参数都会影响我们搭建的决策树模型的准确性,这里我们以max_depth(最大深度)、criterion(特征选择标准)、min_samples_split(子节点向下分裂所需最小样本数),这三个参数为例,来进行多参数调优,代码如下:


from sklearn.model_selection import GridSearchCV
params = {'max_depth':[5,7,9,11,13],'criterion':['gini','entropy'],'min_samples_split':[5,7,9,11,13,15]}
model = DecisionTreeClassifier()
grid_search = GridSearchCV(model,params,scoring='roc_auc',cv=5)
grid_search.fit(X_train,Y_train)


输出参数的最优值:


grid_search.best_params_



78.png

我们用上面获得的参数最优值重新搭建模型,来查看AUC值是否得到了提高,代码如下:


model = DecisionTreeClassifier(criterion='entropy',max_depth=13,min_samples_split=15)
model.fit(X_train,Y_train)
y_pred_proba = model.predict_proba(X_test)
from sklearn.metrics import roc_auc_score
score = roc_auc_score(Y_test.values,y_pred_proba[:,1])


得到的AUC值为:


79.png


比之前的0.985有所提高,看来模型得到进一步优化。


03小结


1. 本文详细介绍了K交叉验证与GridSearch网格搜索,有兴趣的读者可以自己尝试一下。

2. 本文仅供学习,不做它用。

3. 点击在看,即可找志斌领取源码。

相关文章
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
1032 0
|
9月前
|
机器学习/深度学习 数据采集 算法
Python | K折交叉验证的参数优化的GradientBoost及SHAP可解释性分析回归预测算法
本教程介绍基于Python的GradientBoost回归预测算法,结合K折交叉验证与贝叶斯/随机/网格搜索进行超参数优化,并引入SHAP实现模型可解释性分析。涵盖数据预处理、模型训练、多维度评估及可视化,适用于地球科学、医学、工程、经济等多个领域的连续变量预测任务,代码与数据齐全,适合科研与实际应用。
647 2
|
7月前
|
算法 数据处理 调度
【VRP问题】基于遗传算法求解带容量和体积的车辆路径规划问题CVRP问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 一、 引言:物流人头疼的 CVRP 难题,到底难在哪? 1.1 从快递配送看 VRP 的现实意义 在电商行业蓬勃发展的当下,每年的 “双 11”“618” 大促期间,海量的快递订单如潮水般涌来。你是否想过,快递企业是如何在短时间内,调度有限的车辆,将这些包裹准确无误地送到千
730 1
|
存储 人工智能 监控
2025 年可观测 10 大趋势预测
2025 年可观测 10 大趋势预测
971 0
Python 绘制漂亮的折线图
折线图是一种用于展示数据随时间或其他变量变化趋势的图表。在 Python 中,我们可以使用`matplotlib`库来绘制漂亮的折线图。`matplotlib`是一个功能强大且广泛使用的绘图库,它提供了丰富的工具和选项来创建各种类型的图表。
Python 绘制漂亮的折线图
|
机器学习/深度学习 算法 数据挖掘
【机器学习】小波变换在特征提取中的实践与应用
【机器学习】小波变换在特征提取中的实践与应用
2255 0
|
调度 Unix 数据库
进程,轻量级进程,内核线程,用户线程的区别关系
  在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。
2967 0
|
机器学习/深度学习 数据采集 自然语言处理
图像分类模型评估之用python绘制混淆矩阵confusion_matrix_python confusion_matrix
图像分类模型评估之用python绘制混淆矩阵confusion_matrix_python confusion_matrix
|
自然语言处理 监控 关系型数据库
mysql造数据占用临时表空间
【5月更文挑战第20天】MySQL在处理复杂查询时可能使用临时表,可能导致性能下降。临时表用于排序、分组和连接操作。常见问题包括内存限制、未优化的查询、数据类型不当和临时表清理。避免过度占用的策略包括优化查询、调整系统参数、优化数据类型和事务管理。使用并行查询、分区表和监控工具也能帮助管理临时表空间。通过智能问答工具如通义灵码,可实时续写SQL和获取优化建议。注意监控`Created_tmp_tables`和`Created_tmp_disk_tables`以了解临时表使用状况。
1096 5
|
机器学习/深度学习 算法 测试技术
Python贷款违约预测:Logistic、Xgboost、Lightgbm、贝叶斯调参/GridSearchCV调参|数据分享
Python贷款违约预测:Logistic、Xgboost、Lightgbm、贝叶斯调参/GridSearchCV调参|数据分享

热门文章

最新文章