1 简 介
目前非常多的超参寻优算法都不可避免的有下面的一个或者多个问题:
- 需要人为的定义搜索空间;
- 没有剪枝操作,导致搜索耗时巨大;
- 无法通过小的设置变化使其适用于大的和小的数据集;
本文介绍的一种超参寻优策略则同时解决了上面三个问题,Optuna技术
2 Optuna的3大优点
01 Define-By-Run的API
Optuna将超参数优化描述为一个最小化/最大化目标函数的过程,该目标函数以一组超参数作为输入并返回其(验证)分数。该函数不依赖于外部定义的静态变量,动态构造神经网络结构的搜索空间(层数和隐单元数)。Optuna是以每一个优化过程为研究对象,以每一个评价目标函数为试验对象。Optuna中的目标函数接收的不是超参数值,而是与单个试验相关联的活动试验对象。
- 模块化编程:Optuna的代码是模块化的,用户可以轻松地用其他条件变量和其他参数集的方法扩充代码,并从更多样化的模型池中进行选择。
- Optuna可以较为容易地进行部署;
02 高效的采样和剪枝策略
-
关系采样,Optuna可以识别关于共现的实验结果,通过这种方式,框架可以在经过一定数量的独立采样后识别出潜在的共现关系,并使用推断出的共现关系进行用户选择的关系采样算法。
-
高效的剪枝算法,Optuna会定期监测中间目标值并终止不符合预定条件的试验。它还采用异步Successive
Halving算法,所以我们可以在此进行并行计算,而相互不会有太多影响。
03 可扩展的同时易于设置
Optuna是一个可扩展的系统,它可以处理各种各样的任务,包括:
- 从需要大量工作人员的繁重实验到通过Jupyter Notebook等交互界面进行的试验级、轻量级计算;
- 当用户需要进行分布式计算时,Optuna的用户可以部署关系数据库作为后端。Optuna的用户也可以使用SQLite数据库。
- Optuna的新设计大大减少了部署存储所需的工作量,新的设计可以很容易地集成到Kubernetes这样的容器编排系统中。
3 Optuna+LightGBM 调参举例
#!pip install optuna
3.1 数据集生成
import optuna
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import KFold , cross_val_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import lightgbm as lgb