全局、无导数和无参数(超参数)优化
项目描述
LIPO是一个用于导数和无参数全局优化的软件包,例如用于超参数调整。它基于dlib
软件包,并提供对其优化例程的包装。
该算法优于随机搜索 - 有时差距可达10000倍。与需要“调整调整器”的贝叶斯优化相比,它通常更可取。性能与适度或良好调优的贝叶斯优化相当。
提供的实现具有在找到限制过于严格(即最优解过于接近其中一个)时自动扩大搜索空间的选择。
有关详细信息,请参阅LIPO算法实现。
存在一篇关于dlib
作者的优秀博客文章,描述了它是如何工作的。
安装
执行
pip安装lipo
用法
from lipo import GlobalOptimizer
def function(x, y, z):
zdict = {"a": 1, "b": 2}
return -((x - 1.23) ** 6) + -((y - 0.3) ** 4) * zdict[z]
pre_eval_x = dict(x=2.3, y=13, z="b")
evaluations = [(pre_eval_x, function(**pre_eval_x))]
search = GlobalOptimizer(
function,
lower_bounds={"x": -10.0, "y": -10},
upper_bounds={"x": 10.0, "y": -3},
categories={"z": ["a", "b"]},
evaluations=evaluations,
maximize=True,
)
num_function_calls = 1000
search.run(num_function_calls)
如果需要,优化器将自动扩展搜索边界。
此外,该软件包提供scikit-learn接口的实现,用于超参数搜索。
from lipo import LIPOSearchCV
search = LIPOSearchCV(
estimator,
param_space={"param_1": [0.1, 100], "param_2": ["category_1", "category_2"]},
n_iter=100
)
search.fit(X, y)
print(search.best_params_)
与其他框架的比较
有关基准测试,请参阅benchmark
目录中的notebook。
scikit-optimize
这是一个贝叶斯框架。
+
选择良好的先验可以略微加快速度并获得非常好的结果
-
如果选择了错误的先验,调整可能需要很长时间
-
它不是参数-free - 可能会陷入局部最优,这意味着可能需要调整调整器
-
当 LIPO 接近最小值时,使用二次近似可以更快地收敛
-
搜索空间的探索不是系统的,即结果可能因运行而异
Optuna
+
它并行化非常好
+
它可以提前停止训练。这非常有用,例如对于神经网络,可以加快调整速度
+
选择良好的先验可以略微加快速度并获得非常好的结果
-
如果选择了错误的先验,调整可能需要很长时间
-
它不是无参数的,即可能需要对调优器进行一些调整(尽管默认设置相当不错)
-
当 LIPO 接近最小值时,使用二次近似可以更快地收敛
-
搜索空间的探索不是系统的,即结果可能因运行而异
关闭
lipo-1.2.2.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8de6eb717d64be72b6e66fece6da88d3dd17e07836c5eb4bd0c844ba72785d31 |
|
MD5 | b776db8b2fb9a006fd2db18e92893e3d |
|
BLAKE2b-256 | 47dae08091e859e3913abc1da04e1aa367c7533d1d041974b94d37d24f3a6e3e |
关闭
lipo-1.2.2-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b103315fddc6e4513d776a0fbd8cc14b23c2335fe99473ddbb993b72a0c0e3f6 |
|
MD5 | 2ec2fb2f48b8a8bb2b2e35721dfba06e |
|
BLAKE2b-256 | 2d1c1e98cfd4ced290ef8c0da856f27e034d138f9273630aa9048d5e6ef07e16 |