在机器学习实战中,常常会涉及到超参数优化,常见的超参数优化主要包括两种策略:
(1)网格搜索
这是一种广泛使用的传统方法,它通过执行超参数调整来确定给定模型的最佳值。网格搜索通过在模型中尝试所有可能的参数组合来工作,这意味着执行整个搜索将花费大量时间,这可能会导致计算成本非常高。
(2)随机搜索
在超参数值的随机组合用于为构建的模型寻找最佳解决方案时,这种方法的工作方式不同。随机搜索的缺点是有时会漏掉搜索空间中的重要点
下面主要记录三种调参神器。
-
Hyperopt
Hyperopt是一个强大的python库,它的全称是Hyperparameter Optimization。用于超参数优化,由jamesbergstra开发。Hyperopt使用贝叶斯优化的形式进行参数调整,允许你为给定模型获得最佳参数。它可以在大范围内优化具有数百个参数的模型。主要使用(1)随机搜索算法(2)模拟退火算法(3)TPE算法来对某个算法模型的最佳参数进行智能搜索。
-
SKOPT
scikit-learn 中的一个标准方法是使用
sklearn.model_selection.GridSearchCV
类,它为每个参数尝试一组值,并简单地枚举参数值的所有组合。随着新参数的增加,这种搜索的复杂性呈指数增长。一种更具可扩展性的方法是使用sklearn.model_selection.RandomizedSearchCV
,但是它没有利用搜索空间的结构。Scikit-optimize 算是
sklearn.model_selection.GridSearchCV
的一个替代品,它利用贝叶斯优化,其中一个称为“surrogate”的预测模型用于对搜索空间进行建模,并用于尽快获得良好的参数值组合。SKOPT 通过创建另一个模型来简化超参数优化,该模型通过更改其超参数试图最小化初始模型损失。
-
Optuna
Optuna 是一个特别为机器学习设计的自动超参数优化软件框架.它具有命令式的, define-by-run 风格的 API.由于这种 API 的存在, 用 Optuna 编写的代码模块化程度很高, Optuna 的用户因此也可以动态地构造超参数的搜索空间.