\(sklearn\) 官网中的 GridSearchCV。
机器学习模型中,需要人工选择的参数称为超参数。
\(GridSearchCV\) 可以拆分为两部分\(GridSearch、CV\),即网格搜索、交叉验证。\(GridSearch\) 是一种调参手段,穷举搜索,即在所有候选的参数中,通过循环遍历每一种可能,选择最好的参数。
1. GridSearchCV 简介
\(GridSearchCV\) 的意义是自动调参,将参数输进去,给出最优化结果和参数。缺点是适用小数据集(小于 \(10000\)),数据量比较大的时候,使用快速调优方法——坐标下降。它其实是一种贪心算法:拿对当前模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。该方法的缺点是调参结果可能是局部最优不是全局最优。但是省时省力,巨大的优势面前,可以一试。
2. GridSearchCV 参数
class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)
参数:
-
estimator
:选择使用的模型,并且传入除需要确定最佳的参数外的其他参数。每个分类器都需要一个 \(scoring\) 参数,或者 \(score\) 方法,如:estimator = GradientBoostingRegressor()
-
param_grid
:调参的参数列表或字典。如 \(GradientBoostingRegressor()\) 分类模型中:param_grid = {'loss': ['squared_error', 'absolute_error', 'huber', 'quantile'], 'n_estimators':[10, 50, 100], 'learning_rate': [0.05, 0.1, 0.15]}
这样就有 \(36\) 种超参数组合来进行网格搜索,选择一个拟合分数最好的超平面系数。
-
scoring=None
:模型评价标准。\(scoring = None\) 表示使用 \(estimator\) 的误差估计函数。 -
n_jobs=None
:并行数。\(n\_jobs=None\) 表示默认值取 \(1\);\(n\_jobs=-1\) 表示与 \(CPU\) 核数一致。 -
refit=True
:默认 \(True\),表示程序以交叉验证得到的最佳参数后,用最佳参数再次 \(fit\) 一遍全部数据集。作为最终性能评估的最佳模型参数。 -
cv = None
:交叉验证参数,\(cv = None\) 表示默认值取 \(3\),使用三折交叉验证。
3. 常用方法、属性
① grid.fit()
:运行网格搜索。
② best_params_
:获得交叉检验模型得出的最优参数。
③ best_score_
:获得交叉检验模型得出的最优得分。
④ cv_results_
:不同参数下模型的交叉检验结果。
⑤ best_estimator_
:获得交叉检验模型得出的最优模型对象。