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能否使用OpenJPA将一个实体持久化到多个持久化单元?   java如何访问当前按下的键   java singleton是否意味着哈希代码总是返回相同的值?   inputstream无法在Java中同时使用STDIN和STDERR读取程序输出   java运行时有多贵。getRuntime()与获取内存度量相结合   java AndroidStudio ListView适配器更新   java小程序请求未扩展实时会话   java是设置布尔值所必需的关键部分?   java比较两个字符串,并突出显示发现的不匹配项   java带抽屉布局,无论哪个屏幕处于活动状态,如何在按下后退键时关闭应用程序?   爪哇:颜色有什么区别。黑色和彩色。黑色   Velocity模板中子类的java访问方法   java如何快速学习Drools或其他规则引擎   从Java应用程序访问时缓存数据库查询结果   java cassandra nodetool JPLISAgent。c错误   java我正在解析一个没有pubDate的RSS提要,有没有其他方法可以确定一个项目是何时发布的?