gridsearchcv参数_机器学习理论大会战——参数寻优(三种方法)

1 参数寻优与网格搜索

参数寻优指的是我们通过一系列的尝试,对模型中的参数分别取不同的值时,查看当前参数取值下的模型预测性能。通过比较各种参数取值下的模型预测性能,来确定最佳的参数取值。

通常一个模型会有N个参数,而每个参数的取值可能有很多,假设最终我们设定有M个(实际上,每个参数的取值个数并不一定相等,我们这里做一个简化)。那么,如果按照多层for循环来嵌套寻找最佳参数取值组合的例子,该参数寻优就要经历N*M次迭代才可能找到一个合适的参数取值组合。

但不幸的是,往往这个时候的参数寻优费力耗时不说,还有可能携带着模型过拟合的风险。也就是说我们这样的人工参数寻优的办法很多时候并不是十分可靠。

因此,Scikit-learn库为我们提供了一种名为“网格搜索”的参数寻优方式。针对任意模型需要重点配置的参数,我们事先对这些参数的取值做一个汇总,并存入一个叫:param_grid的参数中。这个参数是网格搜索的函数:GridSearchCV()中的一个重要参数,用于传递参数取值给GridSearchCV中指定的学习模型。

比如,我们在分享SVM的相关知识时,知道该学习算法最关心的两个参数的取值为C和gamma。我们可以这么来设置C和gamma,然后利用GridSearchCV()函数来帮助我们实现参数的自动化寻优:

param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100],

                        'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}

svc = svm.SVC()

clf = GridSearchCV(svc, param_grid )

不过,通常我们都会在GridSearchCV()函数中携带着交叉验证机制,因此,上面的代码通常我们会改写成下面的形式:

param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100],

                        'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}

svc = svm.SVC()

clf = GridSearchCV(svc, param_grid,cv=5 )

这里的cv如果不设置,则默认携带的是5折的交叉验证机制;如果为一个整数则为分层k折交叉验证机制。当然,cv还可以是某个交叉验证分离器对象,就如我们在介绍交叉验证机制时所提到的那样。

网格搜索函数GridSearchCV()最终会创造出一个网格搜索器对象。通过网格搜索函数GridSearchCV()所搜索出来的参数通常都会放在网格搜索器对象中的best_params_属性中,而交叉验证最佳精度保存在best_score_中。

此外,grid_search.best_estimator_属性保存了当前最优参数取值组合下所训练出来的学习模型,我们可以通过对grid_search.best_estimator_的访问来获得当前的最优学习模型是什么样的。

由于网格搜索器本身具有predict和score方法,所以不需要使用它的best_estimator_属性来进行预测或评估模型。

网格搜索的结果可以在网格搜索器的cv_results_属性中找到,它是一个字典,其中保存了搜索的所有内容。它里面包含许多细节,最好将其转换成pandas数据框后再查看。

2 非网格的参数寻优

上面我们介绍的是一种典型的网格式的参数寻优&#x

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值