hyperopt中文文档:Interfacing-With-Other-Languages(在其他语言中使用hyperopt)

其他语言接口

Font Tian translated this article on 23 December 2017

两种接口策略

基本上有两种方法将 hyperopt 与其他语言进行连接:

  1. 你可以为你的成本函数中编写一个Python包装器,这个函数不是用Python编写的(用Python调用其它语言,译者注)
  2. 您可以将 hyperopt-mongo-worker 替换为直接使用JSON与MongoDB通信。

包装对非Python代码的调用

使用hyperopt优化非python函数的参数(例如外部可执行文件)的最简单方法是在外部可执行文件周围编写一个Python函数包装器。假设你有一个可执行文件 foo 需要一个整数的命令行参数 --n 并打印出一个分数,你可以像这样包装它:

    import subprocess
    def foo_wrapper(n):
        # Optional: write out a script for the external executable
        # (we just call foo with the argument proposed by hyperopt)
        proc = subprocess.Popen(['foo', '--n', n], stdout=subprocess.PIPE)
        proc_out, proc_err = proc.communicate()
        # <you might have to do some more elaborate parsing of foo's output here>
        score = float(proc_out)
        return score

当然,要优化 n 参数给 foo 你也需要调用 hyperopt.fmin ,并且定义搜索空间。我觉得你会想在Python中做这个部分。

    from hyperopt import fmin, hp, random

    best_n = fmin(foo_wrapper, hp.quniform('n', 1, 100, 1), algo=random.suggest)

    print best_n

当这里的搜索空间大于简单的搜索空间时,您可能需要或者必须包装函数来将其参数转换为外部可执行文件的某种 配置文件/脚本。

这种方法与MongoTrials完全兼容。

直接与MongoDB进行通信

通过直接与MongoDB进行通信,可以更直接地与搜索过程(使用 MongoTrials 时)进行交互,就像 hyperopt-mongo-worker 一样。该内容已经超过了本教程的范围,但Hannes Schultz(@ Contemporaryer)的hyperopt与他的MDBQ项目可以作为有不错的参考,这是一个独立的基于MongoDB的任务队列:

https://github.com/temporaer/MDBQ/blob/master/src/example/hyperopt_client.cpp

查看代码以及 hyperopt / mongoexp.py 的内容,了解工作进程如何在工作队列中保留作业,并将结果存储回MongoDB。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hyperopt-sklearn是基于scikit-learn项目的一个子集,其全称是:Hyper-parameter optimization for scikit-learn,即针对scikit-learn项目的超级参数优化工具。由于scikit-learn是基于Python的机器学习开源框架,因此Hyperopt-sklearn也基于Python语言Hyperopt-sklearn的文档称:对于开发者而言,针对不同的训练数据挑选一个合适的分类器(classifier)通常是困难的。而且即使选好了分类器,后面的参数调试过程也相当乏味和耗时。更严重的是,还有许多情况是开发者好不容易调试好了选定的分类器,却发现一开始的选择本身就是错误的,这本身就浪费了大量的精力和时间。针对该问题,Hyperopt-sklearn提供了一种解决方案。Hyperopt-sklearn支持各种不同的搜索算法(包括随机搜索、Tree of Parzen Estimators、Annealing等),可以搜索所有支持的分类器(KNeightborsClassifier、KNeightborsClassifier、SGDClassifier等)或者在给定的分类器下搜索所有可能的参数配置,并评估最优选择。并且Hyperopt-sklearn还支持多种预处理流程,包括TfidfVectorizer,Normalzier和OneHotEncoder等。那么Hyperopt-sklearn的实际效果究竟如何?下表分别展示了使用scikit-learn默认参数和Hyperopt-sklearn优化参数运行的分类器的F-score分数,数据源来自20个不同的新闻组稿件。可以看到,经过优化的分类器的平均得分都要高于默认参数的情况。另外,Hyperopt-sklearn的编码量也很小,并且维护团队还提供了丰富的参考样例。 标签:Hyperopt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值