ml模型超参数优化库

optml的Python项目详细描述


这个包提供了几种黑盒优化方法的实现来优化 机器学习模型的超参数。它的目的是使数据科学家能够使用 快速成型的优化技术。只需导入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)。

为了和Keras一起运行 XGBoost模型这些库也必须安装 当然。

安装

如果scikit learn是0.19或更高版本,只需使用pip install optml和 你准备好了。

用法

指定ml模型和要优化的参数。对于你必须的参数 选择类型(如integer、categorical、boolean等)及其可以接受的值的范围。

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到crossentropy到custom的任何东西 功能。求值函数的第一个参数是真标签数组,第二个参数是 参数是具有模型预测的数组。

defclf_score(y_true,y_pred):returnnp.sum(y_true==y_pred)/float(len(y_true))

导入并初始化优化器,并为某些培训数据优化模型。

fromoptml.bayesian_optimizerimportBayesianOptimizerbayesOpt=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的优化器都要求参数是有界的。

number of evaluationsworks with large search spacecan use training in parallelhandles categorical parametersstochastic optimisation
Gridsearchhighnoyesyesno
Random Searchhighyesyesyesyes
Genetic Algorithmhighyesnot implementedyesyes
Bayesian Optimizerlowyesnot implementedyesyes
Hyperoptlowyesyesyesyes

待办事项

  1. 算法:
  • 为遗传算法实现更多选项
  • 元启发式/群优化
  1. 功能性
  • 如果在x次迭代后没有显著的改进,则提前停止
  1. 可用性
  • 更好的文档记录

作者

许可证

这个项目是在mit许可下授权的-请参阅LICENSE.md文件 详细信息

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我是否需要构造一个带有*非final*但不可变字段的不可变类?   java如何使用jaxb读取属性?   java为什么不打印空值以外的任何内容?   java Struts2如何在不使用struts的情况下重定向到操作。xml?   java方法参数未在其实现中使用   在Java中更改终端内部的变量   Spring中的java依赖项注入失败   java如何使用getAttribute Selenium防止获取重复的HREF   优先级队列的java顺序不符合预期   java如何使用Spring TaskExecutor在应用程序的所有请求中使用单个任务池   java Firebase RecyclerView不会从数据库中检索项目并将其显示在屏幕上。屏幕是空的   java将YUV_420_888转换为字节数组   spring停止使用Java缓存文件   java在执行maven clean安装时,我在eclipse智能家居中遇到了这种错误   stream Java=下载缓冲区未满?冲洗/缓冲是如何工作的?   查询SQL server时重置java JDBC连接   java如何避免在两个函数中使用相同的逻辑。   转换java。lang.Boolean到Scala Boolean