使用GridSearchCV进行网格搜索

43 sec read

GridSearchCV简介

在机器学习模型中,需要人工选择的参数称为超参数。比如随机森林中决策树的个数,人工神经网络模型中的隐藏层层数和每层的节点个数,正则项中常数大小等等,它们都需要事先指定。超参数选择不恰当,就会出现欠拟合或者过拟合的问题。

我们在选择超参数有两个途径:1)凭经验;2)选择不同大小的参数,带入到模型中,挑选表现最好的参数。通过途径2选择超参数时,人力手动调节注意力成本太高,非常不值得。For循环或类似于for循环的方法受限于太过分明的层次,不够简洁与灵活,注意力成本高,易出错。GridSearchCV 称为网格搜索交叉验证调参,它通过遍历传入的参数的所有排列组合,通过交叉验证的方式,返回所有参数组合下的评价指标得分。

GridSearchCV听起来很高大上,其实就是暴力搜索。注意的是,该方法在小数据集上很有用,数据集大了就不太适用了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力。

GridSearchCV使用说明

GridSearchCV原型

GridSearchCV参数详解

estimator

所使用的模型,传入除需要确定最佳的参数之外的其他参数。模型都需要一个score方法,或传入scoring参数。

param_grid

需要搜索调参的参数字典,参数值类型为字典(dict)或由字典组成的列表(list)。用于设置待评测参数和对应的参数值。

scoring=None

模型评价标准,默认None,这时需要使用score函数;或者如scoring=’roc_auc’,根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。下文表格中详细指定了score可取的值和函数形式。

参考链接:https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

n_jobs=None

并行计算线程个数,1:默认值,可以设置为 -1(跟CPU核数一致),这样可以充分使用机器的所有处理器。

refit=True

默认为True,程序将会以交叉验证训练集得到的最佳参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。

cv=’warn’

交叉验证参数,可接受的参数:

  • 默认None,使用3折交叉验证。
  • 指定fold数量
  • CV splitter
  • yield训练、测试数据的生成器。

verbose=0

日志冗长度

  • 0:不输出训练过程
  • 1:偶尔输出
  • >1:对每个子模型都输出

pre_dispatch=‘2*n_jobs’

指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致内存问题,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次。

error_score=’raise-deprecating’

拟合中发生错误时分配的值,如果设置为’raise’则会引发错误。如果设置的时一个数字,则为引发FitFailedWarning的警告信息,默认值将在0.22版本其由原先的’raise’ 更改为np.nan。

return_train_score=’warn’

如果“False”,cv_results_属性将不包括训练分数。

GridSearchCV对象

  • cv_results_:用来输出cv结果的,可以是字典形式也可以是numpy形式,还可以转换成DataFrame格式
  • best_estimator_:通过搜索参数得到的最好的估计器,当参数refit=False时该对象不可用
  • best_score_:float类型,输出最好的成绩
  • best_params_:通过网格搜索得到的score最好对应的参数
  • best_index_:对应于最佳候选参数设置的索引(cv_results_数组)。cv_results _ [‘params’] [search.best_index_]中的dict给出了最佳模型的参数设置,给出了最高的平均分数(search.best_score_)。
  • scorer_:评分函数
  • n_splits_:交叉验证的数量
  • refit_time_:refit所用的时间,当参数refit=False时该对象不可用

GridSearchCV方法

  • decision_function(X):返回决策函数值(比如svm中的决策距离)
  • fit(X,y=None,groups=None,fit_params):在数据集上运行所有的参数组合
  • get_params(deep=True):返回估计器的参数
  • inverse_transform(Xt):Call inverse_transform on the estimator with the best found params.
  • predict(X):返回预测结果值(0/1)
  • predict_log_proba(X): Call predict_log_proba on the estimator with the best found parameters.
  • predict_proba(X):返回每个类别的概率值(有几类就返回几列值)
  • score(X, y=None):返回函数
  • set_params(**params):Set the parameters of this estimator.
  • transform(X):在X上使用训练好的参数

GridSearchCV官方说明:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

SciPy中的稀疏矩阵scipy.sparse

稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚
1 min read

Python推荐系统库Surprise

Surprise简介 Surprise(Simple Python Recommendation System
14 sec read

Python因子分解库:fastFM

FastFM简介 FastFM的主要特点是将是将因子分解封装成scikit-learn API接口,核心代码使
2 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注