美文网首页
hyperopt 笔记

hyperopt 笔记

作者: AsdilFibrizo | 来源:发表于2021-07-26 10:39 被阅读0次

    1.搜索空间

    下面介绍常用的参数表达式

    1.hp.choice(label, options)
    label 表示参数名称 options可以使嵌套也可以是列表
    
    2.hp.randint(label, upper)
    返回 [0, upper) 范围内的随机整数
    
    3.hp.uniform(label, low, high)
    返回low和high之间的一个均匀分布数字
    
    4.hp.quniform(label, low, high, q)
    返回 round(uniform(low,high)/q)*q,适用于那些离散的取值
    简单的理解为取 [low, high] 中能被q整除的整数
    
    5.hp.pchoice(label, options) 
    根据概率返回相应值
    options: [(probability, value), (probability, value)]
    
    6.hp.normal(label, mu, sigma)
    返回一个正态分布的实值,均值为mu和标准差为sigma。优化时,这是一个无约束变量。
    

    例子

    from hyperopt import hp
    from hyperopt import fmin, tpe, space_eval
    def f(args):
      x = args['x']
      y = args['y']
      z = args['z']
      k = args['k']
      l = args['l']
      return x + y + z + k + l
    
    # 注意space会以字典的形式传入到函数f,也就是args = space
    # hp.choice 中的label 是在print时用于方便显示,取什么名称都可以
    space = {
        'x': hp.choice('参数x',[1,2,3,4,5]),
        'y': hp.randint('参数y', 10), # [0,10)
        'z': hp.uniform('参数z', 0, 1), # (0,1) 中任意一个浮点数
        'k': hp.quniform('参数k', 5, 10, 3), # 5-10之间能被3整除的数
        'l': hp.pchoice('参数l', [(0.1, 1), (0.4, 2), (0.5, 3)]) 
    }
    best = fmin(f, space, algo=tpe.suggest, max_evals=1000)
    print(f'最好的参数是:{best}')
    
    结果:
    100%|██████████| 1000/1000 [00:39<00:00, 25.02it/s, best loss: 8.00009375742339]
    最好的参数是:{'参数k': 6.0, '参数l': 0, '参数x': 0, '参数y': 0, '参数z': 9.375742338902163e-05}
    

    注意:hp.quniform(label, low, high, q) 理解

    from hyperopt import hp
    from hyperopt import fmin, tpe, space_eval
    def f(args):
      k = args['k']
      print(k)
      return k+1
    
    # 注意space会以字典的形式传入到函数f,也就是args = space
    # hp.choice 中的label 是在print时用于方便显示,取什么名称都可以
    space = {
        'k': hp.quniform('参数k', 0, 10, 3)
     #  取[0,10]能被3整除的数
     # 相当于取 0,3,6,9中任意一个数
    }
    trials = Trials()
    best = fmin(f, space, algo=tpe.suggest, max_evals=10,trials=trials)
    
    结果:
    9.0
    3.0
    6.0
    9.0
    0.0
    6.0
    3.0
    3.0
    0.0
    0.0
    100%|██████████| 10/10 [00:00<00:00, 119.31it/s, best loss: 1.0]
    
    

    2.搜索函数

    algo指定搜索算法,目前支持以下算法:
    1.随机搜索(hyperopt.rand.suggest)
    2.模拟退火(hyperopt.anneal.suggest)
    3.TPE算法(hyperopt.tpe.suggest,算法全称为Tree-structured Parzen Estimator Approach)
    是用高斯混合模型GMM(Gaussian Mixture Model)来学习超参模型的一种方法
    
    这里需要单独引用
    from hyperopt import anneal, tpe, rand
    
    如果直接使用
    import hyperopt
    hyperopt.anneal.suggest 则无法使用
    

    3.最小化函数

    fmin(fn, space, algo, max_evals, trials=None)
    fn: 目标函数
    space: 搜索空间
    algo: 优化算法
    max_evals: 迭代次数
    trials: 捕获信息
    trials.trials - 表示有关搜索的所有内容的词典列表
    trials.results - 搜索结果列表
    trials.losses() - 损失函数列表
    trials.statuses() - 结果状态列表
    

    相关文章

      网友评论

          本文标题:hyperopt 笔记

          本文链接:https://www.haomeiwen.com/subject/aciwmltx.html