当前位置:   article > 正文

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/463869
推荐阅读
相关标签
  

闽ICP备14008679号