UltraOpt 开源项目教程
ultraopt 项目地址: https://gitcode.com/gh_mirrors/ul/ultraopt
1. 项目介绍
UltraOpt 是一个简单且高效的库,用于最小化昂贵且嘈杂的黑盒函数。它可以应用于许多领域,如超参数优化(HPO)和自动机器学习(AutoML)。UltraOpt 吸收了现有优化库(如 HyperOpt、SMAC3、scikit-optimize 和 HpBandSter)的优点,并实现了一种新的贝叶斯优化算法:嵌入树-Parzen 估计器(ETPE),该算法在实验中优于 HyperOpt 的 TPE 算法。此外,UltraOpt 的优化器被重新设计以适应 HyperBand 和 SuccessiveHalving 评估策略以及 MapReduce 和异步通信条件。
2. 项目快速启动
安装
UltraOpt 需要 Python 3.6 或更高版本。您可以通过 pip 安装最新版本:
pip install ultraopt
或者,您可以下载仓库并手动安装:
git clone https://github.com/auto-flow/ultraopt.git
cd ultraopt
python setup.py install
快速启动示例
以下是一个使用 UltraOpt 进行超参数优化的快速启动示例。
定义配置空间
首先,定义一个随机森林的超参数配置空间:
HDL = {
"n_estimators": {"_type": "int_quniform", "_value": [10, 200, 10], "_default": 100},
"criterion": {"_type": "choice", "_value": ["gini", "entropy"], "_default": "gini"},
"max_features": {"_type": "choice", "_value": ["sqrt", "log2"], "_default": "sqrt"},
"min_samples_split": {"_type": "int_uniform", "_value": [2, 20], "_default": 2},
"min_samples_leaf": {"_type": "int_uniform", "_value": [1, 20], "_default": 1},
"bootstrap": {"_type": "choice", "_value": [True, False], "_default": True},
"random_state": 42
}
定义目标函数
接下来,定义一个目标函数:
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import cross_val_score, StratifiedKFold
from ultraopt.hdl import layering_config
X, y = load_digits(return_X_y=True)
cv = StratifiedKFold(5, True, 0)
def evaluate(config: dict) -> float:
model = RandomForestClassifier(**layering_config(config))
return 1 - float(cross_val_score(model, X, y, cv=cv).mean())
启动优化过程
现在,可以启动优化过程:
from ultraopt import fmin
result = fmin(eval_func=evaluate, config_space=HDL, optimizer="ETPE", n_iterations=30)
print(result)
3. 应用案例和最佳实践
超参数优化(HPO)
UltraOpt 在超参数优化中的应用非常广泛。通过定义配置空间和目标函数,UltraOpt 可以自动搜索最佳的超参数组合,从而提高模型的性能。
自动机器学习(AutoML)
UltraOpt 还可以用于解决 AutoML 中的 CASH 问题(算法选择和超参数优化的组合问题)。通过结合 HyperBand 评估策略和 UltraOpt 的 ETPE 优化器,可以有效地解决复杂的 AutoML 问题。
4. 典型生态项目
HyperOpt
HyperOpt 是一个广泛使用的超参数优化库,UltraOpt 在设计时吸收了 HyperOpt 的优点,并在此基础上进行了改进。
SMAC3
SMAC3 是另一个用于超参数优化的库,UltraOpt 也借鉴了 SMAC3 的一些设计思想。
scikit-optimize
scikit-optimize 是一个基于贝叶斯优化的库,UltraOpt 在实现 ETPE 算法时参考了 scikit-optimize 的一些实现细节。
HpBandSter
HpBandSter 是一个用于超参数优化的库,UltraOpt 在设计时考虑了 HpBandSter 的分布式计算能力。
通过结合这些生态项目的优点,UltraOpt 提供了一个更强大、更灵活的超参数优化解决方案。