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

相关文章
|
9月前
|
机器学习/深度学习 Python
Scikit-Learn 中级教程——网格搜索和交叉验证
Scikit-Learn 中级教程——网格搜索和交叉验证
504 6
|
机器学习/深度学习 算法 API
机器学习交叉验证和网格搜索案例分析
机器学习交叉验证和网格搜索案例分析
165 0
|
4月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
256 1
|
17天前
|
机器学习/深度学习 自然语言处理
《机器学习调优指南:随机搜索与网格搜索的优劣剖析》
在机器学习中,超参数调优至关重要。网格搜索和随机搜索是两种常用方法。网格搜索通过穷举所有超参数组合,确保找到全局最优解,具有全面性和可解释性强的优点,但计算成本高昂、效率低。随机搜索则从超参数空间中随机抽取组合进行评估,计算效率高且灵活性强,但在结果上存在不确定性和缺乏方向性。两者各有优劣,实际应用中可根据资源和需求选择合适的方法,甚至结合使用以提升模型性能。
127 74
|
5月前
|
机器学习/深度学习 算法
R语言超参数调优:深入探索网格搜索与随机搜索
【9月更文挑战第2天】网格搜索和随机搜索是R语言中常用的超参数调优方法。网格搜索通过系统地遍历超参数空间来寻找最优解,适用于超参数空间较小的情况;而随机搜索则通过随机采样超参数空间来寻找接近最优的解,适用于超参数空间较大或计算资源有限的情况。在实际应用中,可以根据具体情况选择适合的方法,并结合交叉验证等技术来进一步提高模型性能。
|
9月前
|
机器学习/深度学习
模型选择与调优:scikit-learn中的交叉验证与网格搜索
【4月更文挑战第17天】在机器学习中,模型选择和调优至关重要,scikit-learn提供了交叉验证和网格搜索工具。交叉验证(如k折、留一法和分层k折)用于评估模型性能和参数调优。网格搜索(如GridSearchCV和RandomizedSearchCV)遍历或随机选择参数组合以找到最优设置。通过实例展示了如何使用GridSearchCV对随机森林模型进行调优,强调了理解问题和数据的重要性。
|
算法 Python
谁更胜一筹?——随机搜索 V.S. 网格搜索
谁更胜一筹?--随机搜索 V.S. 网格搜索 随机法和网格法都是常用的、有效的结构优化方法。那么它们两者当中谁更胜一筹呢?在本文中,作者通过有趣的地形搜索实验,找到了答案。
11376 0
|
机器学习/深度学习 算法
Lesson 9.3 集成算法的参数空间与网格优化和使用网格搜索在随机森林上进行调参
如随机森林中所展示的,集成算法的超参数种类繁多、取值丰富,且参数之间会相互影响、共同作用于算法的最终结果,因此集成算法的调参是一个难度很高的过程。
|
7月前
|
机器学习/深度学习 计算机视觉 Python
模型评估与选择:Sklearn中的交叉验证与网格搜索
【7月更文第23天】在机器学习项目中,模型的评估与选择是至关重要的步骤,它直接关系到模型的泛化能力和最终的应用效果。Scikit-learn(简称sklearn)作为Python中最受欢迎的机器学习库之一,提供了丰富的工具来进行模型调优和性能评估,其中交叉验证(Cross-Validation, CV)与网格搜索(Grid Search)是两个核心组件。本文将深入探讨这两项技术,并通过代码示例展示其在实践中的应用。
118 8
|
机器学习/深度学习 算法
搜索与图论 - 搜索与图在算法中的应用【中】
搜索与图论 - 搜索与图在算法中的应用【中】

热门文章

最新文章