用于 ML 模型的超参数优化的库
项目描述
该软件包提供了几种黑盒优化方法的实现,以调整机器学习模型的超参数。其目的是使数据科学家能够使用优化技术进行快速原型设计。只需导入 OptML 并为其提供模型和要优化的参数。
OptML 为使用 Scikit-Learn、Keras、XGBoost(希望很快 Statsmodels)构建的模型提供统一的接口。
先决条件
此软件包需要 scikit-learn 0.19.0 或更高版本。如果尚未安装 Scikit-Learn,请运行pip install scikit-learn==0.19.0。如果您想使用 HyperoptOptimizer,那么您还需要安装 hyperopt(例如通过pip install hyperopt)。
安装
如果 Scikit-Learn 是 0.19 或更高版本,只需使用pip install optml 安装 optml即可。
用法
指定您的 ML 模型和要优化的参数。对于参数,您必须选择类型(例如整数、分类、布尔值等)及其可以采用的值范围。
model = SomeMLModel()
params = [Parameter(name='param1', param_type='continuous', lower=0.1, upper=5),
Parameter(name='param2', param_type='integer', lower=1, upper=5),
Parameter(name='param3', param_type='categorical', possible_values=['val1','val2','val3'])]
然后定义评估函数。这可以是任何东西,从 RMSE 到交叉熵再到自定义函数。评估函数的第一个参数是真实标签数组,第二个参数是模型预测数组。
def clf_score(y_true,y_pred):
return np.sum(y_true==y_pred)/float(len(y_true))
导入并初始化优化器并针对一些训练数据优化模型。
from optml.bayesian_optimizer import BayesianOptimizer
bayesOpt = BayesianOptimizer(model=model,
hyperparams=params,
eval_func=clf_score)
bayes_best_params, bayes_best_model = bayesOpt.fit(X_train=X_train, y_train=y_train, n_iters=50)
特征
目前这个库包括: * 随机搜索 * 并行网格搜索 * 一个简单的遗传算法 * 贝叶斯优化(也支持分类参数) * Hyperopt(使用 hyperopt)
如何选择优化器
OptML 实施了几种优化方法来解决数据科学问题中可能出现的一系列要求。其中一个主要问题是评估一组参数的模型所需的工作量:如果一个模型需要很长时间来训练,我们应该选择一个优化器,以最大限度地提高每组新参数的潜在改进。在这种情况下,贝叶斯优化和 Hyperopt 更适用。如果一个模型的训练成本很低,那么我们可以寻求并行化评估。
还要考虑参数的数量及其范围。显然,在大搜索空间上进行优化更加困难。如果期望改进最终模型,建议仅在优化中包含参数。
另请注意,OptML 的所有优化器都需要有界的参数。
评价次数 |
适用于大搜索空间 |
可以并行使用训练 |
处理分类参数 |
随机优化 |
|
|---|---|---|---|---|---|
网格搜索 |
高的 |
不 |
是的 |
是的 |
不 |
随机搜索 |
高的 |
是的 |
是的 |
是的 |
是的 |
遗传算法 |
高的 |
是的 |
未实现 |
是的 |
是的 |
贝叶斯优化器 |
低的 |
是的 |
未实现 |
是的 |
是的 |
超光速 |
低的 |
是的 |
是的 |
是的 |
是的 |
待办事项
算法:
为遗传算法实现更多选项
元启发式/群体优化
功能性
如果在 x 次迭代后没有显着改善,则提前停止
可用性
更好的文档
执照
该项目在 MIT 许可下获得许可 - 请参阅LICENSE.md文件了解详细信息