参数调优——K折交叉验证和GridSearch网格搜索

K折交叉验证

在机器学习中,因为训练集和测试集的数据划分是随机的,所以有时会重复地使用数据,以便更好地评估模型的有效性,并选出最好的模型,该做法称为交叉验证。具体而言就是对原始样本数据进行切分,然后组合成为多组不同的训练集和测试集,用训练集训练模型,用测试集评估模型。某次的训练集可能是下次的测试集,故而称为交叉验证。

交叉验证的方法有简单交叉验证、K折交叉验证和留一交叉验证3种。其中K折交叉验证应用较为广泛,它是指将数据集随机等分为K份,每次选取K-1份作为训练集,用剩下的1份作为测试集,得到K个模型后将这K个模型的平均测试效果作为最终的模型效果。

实现K折交叉验证的代码

在这里插入图片描述
第2行代码用cross_val_score()函数进行交叉验证,传入的参数依次为模型名称(model)、特征变量数据(X)、目标变量数据(y)、交叉验证的次数(cv)。这里设置cv为5,表示交叉验证5次,每次随机取4/5的数据用于训练,1/5的数据用于测试。如果不设置该参数,则默认交叉验证3次。此外,这里没有设置scoring参数,表示以默认值’accuracy’(准确度)作为评估标准。
如果想以ROC曲线的AUC值作为评估标准,则可以设置scoring参数为’roc_auc’
在这里插入图片描述

GridSearch网格搜索

GridSearch网格搜索是一种穷举搜索的参数调优手段:遍历所有的候选参数,循环建立模型并评估模型的有效性和准确性,选取表现最好的参数作为最终结果。
以决策树模型最大深度参数max_depth为例,我们可以在[1,3,5,7,9]这些值中遍历,以准确度或ROC曲线的AUC值作为评估标准来搜索最合适的max_depth值。如果要同时调节多个模型参数,例如,模型有2个参数,第1个参数有4种可能,第2个参数有5种可能,所有的可能性可以表示成4×5的网格,那么遍历的过程就像是在网格(Grid)里搜索(Search),这就是该方法名称的由来。

  • 单参数调优
    这里以单参数max_depth为例,演示机器学习中如何用网格搜索进行参数调优。使用Scikit-Learn库中的GridSearchCV()函数对决策树模型进行参数调优,代码如下。
    在这里插入图片描述
    第1行代码从Scikit-Learn库中引入GridSearchCV()函数。
    第2行代码指定决策树模型中待调优参数max_depth的候选值范围。
    第3行代码构建决策树模型并将其赋给变量model。
    第4行代码将决策树模型和待调优参数的候选值范围传入GridSearchCV()函数,并设置scoring参数为’roc_auc’,表示以ROC曲线的AUC值作为评估标准,如果不设置则以默认值’accuracy’(准确度)作为评估标准,设置cv参数为5,表示进行5折交叉验证。
    接着通过如下代码将数据传入网格搜索模型并输出参数的最优值。
    在这里插入图片描述
    在这里插入图片描述

通过如下代码可以查看参数调优后新模型中各个特征变量的特征重要性。
在这里插入图片描述

多参数同时调优

在这里插入图片描述

多参数调优和单参数分别调优是有区别的。不能为了省事,对多个参数分别进行单参数调优,然后将结果汇总,这种做法是不严谨的。因为在进行单参数调优时,其他参数会取默认值,那么就忽略了该参数和其他参数都不取默认值的情况,即忽略了多个参数对模型的组合影响。因此,如果只需要调节一个参数,那么可以进行单参数调优,如果需要调节多个参数,则推荐进行多参数调优。
如果使用GridSearchCV()函数得到的参数最优值是给定范围的边界值,那么有可能存在范围以外的值使得模型效果更好,此时需要额外增大范围,继续进行参数调优。

  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值