实战案例|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. 点击在看,即可找志斌领取源码。

相关文章
|
NoSQL 网络协议 Linux
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
451 1
|
10月前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
516 6
|
前端开发 JavaScript Java
计算机Java项目|基于SpringBoot的在线拍卖系统
计算机Java项目|基于SpringBoot的在线拍卖系统
217 0
|
机器学习/深度学习 算法
R语言超参数调优:深入探索网格搜索与随机搜索
【9月更文挑战第2天】网格搜索和随机搜索是R语言中常用的超参数调优方法。网格搜索通过系统地遍历超参数空间来寻找最优解,适用于超参数空间较小的情况;而随机搜索则通过随机采样超参数空间来寻找接近最优的解,适用于超参数空间较大或计算资源有限的情况。在实际应用中,可以根据具体情况选择适合的方法,并结合交叉验证等技术来进一步提高模型性能。
|
12月前
|
安全 数据库 数据格式
Python量化炒股的获取数据函数—get_fundamentals()
Python量化炒股的获取数据函数—get_fundamentals()
562 0
|
机器学习/深度学习 人工智能 分布式计算
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
机器学习中的超参数调优是提升模型性能的关键步骤,包括网格搜索、随机搜索、贝叶斯优化和遗传算法等方法。网格搜索通过穷举所有可能的超参数组合找到最优,但计算成本高;随机搜索则在预设范围内随机采样,降低计算成本;贝叶斯优化使用代理模型智能选择超参数,效率高且适应性强;遗传算法模拟生物进化,全局搜索能力强。此外,还有多目标优化、异步并行优化等高级技术,以及Hyperopt、Optuna等优化库来提升调优效率。实践中,应结合模型类型、数据规模和计算资源选择合适的调优策略。
619 0
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
|
Python
在Python中,pandas库的`get_dummies`函数
在Python中,pandas库的`get_dummies`函数
1417 2
|
JSON Cloud Native Linux
gRPC-Gateway 快速实战
gRPC-Gateway 快速实战
221 0
gRPC-Gateway 快速实战
|
机器学习/深度学习 数据挖掘 Python
Anaconda的常用命令总结
Anaconda作为一个强大的Python发行版,具备一系列方便的命令行工具,用于管理环境、安装包等任务。本文总结了Anaconda的常用命令。这些命令的灵活使用有助于用户高效地管理Python环境,使Anaconda成为数据科学和开发领域的理想工具。Anaconda的安装简化了Python库和工具的管理,为数据科学家、工程师和研究人员提供了一个强大、集成且易于使用的开发环境。这为快速开始数据分析、科学计算和机器学习项目提供了便捷的途径。
559 0
|
数据采集 自然语言处理 数据可视化
数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析(上)
数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析
582 0