机器学习中的超参数优化
笔记。
超参数搜索
超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过程中获得。在对模型进行训练之前,需要对它们进行赋值。
包括:传统的手工调参, 网格搜索,随机搜索,贝叶斯搜索。
sklearn.model_selection.GridSearchCV — scikit-learn 1.0.1 documentation
网格搜索是一种基本的超参数调优技术。它类似于手动调优,为网格中指定的所有给定超参数值的每个排列构建模型,评估并选择最佳模型。【sklearn的GridSearchCV
,由于它尝试了超参数的每一个组合,并根据交叉验证得分选择了最佳组合,这使得GridsearchCV非常慢。】
使用随机搜索代替网格搜索的动机是,在许多情况下,所有的超参数可能不是同等重要的。随机搜索从超参数空间中随机选择参数组合,参数由n_iter给定的固定迭代次数的情况下选择。实验证明,随机搜索的结果优于网格搜索。【sklearn的RandomizedSearchCV
】随机搜索的问题是它不能保证给出最好的参数组合。
贝叶斯优化属于一类优化算法,称为基于序列模型的优化(SMBO)算法。这些算法使用先前对损失 f 的观察结果,以确定下一个(最优)点来抽样 f。该算法大致可以概括如下。
- 使用先前评估的点 X 1:n,计算损失 f 的后验期望。
- 在新的点 X 的抽样损失 f,从而最大化f的期望的某些方法。该方法指定 f 域的哪些区域最适于抽样。
重复这些步骤,直到满足某些收敛准则。
【scikit- optimization的BayesSearchCV
】要在2维或3维的搜索空间中得到一个好的代理曲面需要十几个样本,增加搜索空间的维数需要更多的样本。
在确定参数的最佳组合的保证和计算时间之间总是存在权衡。如果超参数空间(超参数个数)非常大,则使用随机搜索找到超参数的潜在组合,然后在该局部使用网格搜索(超参数的潜在组合)选择最优特征。
XGBoost调参
XGBoost python调参示例_一路前行-CSDN博客
xgboost原理及调参方法-通俗易懂版本 - 简书 (jianshu.com)
模型融合---Xgboost调参总结 - 走看看 (zoukankan.com)
XGBoost(eXtreme Gradient Boosting)是Gradient Boosting算法的一个优化的版本。
- XGBoost 允许用户定义自定义优化目标和评价标准。
- 当分裂时遇到一个负损失时,GBM(Gradient Boosting Machine)会停止分裂。因此GBM实际上是一个贪心算法。
- XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝。如果某个节点之后不再有正值,它会去除这个分裂。
- 这种做法的优点,当一个负损失(如-2)后面有个正损失(如+10)的时候,就显现出来了。GBM会在-2处停下来,因为它遇到了一个负值。但是XGBoost会继续分裂,然后发现这两个分裂综合起来会得到+8,因此会保留这两个分裂。
optuna
【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)_ccql's Blog-CSDN博客
召唤超参调优开源新神器:集XGBoost、TensorFlow、PyTorch等十大模块于一身 - 知乎 (zhihu.com)
使用 Optuna 优化你的优化器 (qq.com)
optuna是一个使用python编写的超参数调节框架。一个极简的 optuna 的优化程序中只有三个最核心的概念,目标函数(objective),单次试验(trial),和研究(study). 其中 objective 负责定义待优化函数并指定参/超参数数范围,trial 对应着 objective 的单次执行,而 study 则负责管理优化,决定优化的方式,总试验的次数、试验结果的记录等功能。