hyperopt优化

请问您与2019年9月9日提出的关于hyperopt优化问题,结果不在space区间内,这一问题有解决答案了吗?我现在也遇到这样的问题,不知道问题出在哪里了。

在Hyperopt中,如果遇到结果不在预期的搜索空间范围内,可以通过以下方法解决:

  1. 确保搜索空间定义正确。请仔细检查您为每个参数定义的搜索空间。确保使用了正确的分布(如hp.uniform,hp.quniform,hp.normal等)并且指定了正确的范围。
  1. 确保目标函数正确处理参数。在目标函数中,请确保正确地使用传入的参数。例如,对于连续参数,您可能需要使用round()函数将参数四舍五入到指定的精度。对于离散参数,请确保参数在使用前被转换为正确的类型(例如,整数、浮点数或字符串)。
  1. 限制目标函数的输出。如果您的目标函数在某些参数值时返回非常大或非常小的值,这可能会导致优化过程中出现问题。您可以通过设置上下限来解决这个问题,例如,使用numpy.clip()函数将目标函数的输出限制在一个合理的范围内。
  1. 增加迭代次数。在某些情况下,可能需要更多次迭代才能找到一个满足搜索空间约束的解。您可以尝试增加优化过程的迭代次数,以便搜索更多可能的参数组合。

如果问题仍然存在,建议您检查Hyperopt的相关文档以获取更多信息,或者在GitHub上查找相关问题。也可以考虑使用其他优化库,如Optuna,看看是否能解决问题。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:简化hyperopt参数空间配置
  • 除此之外, 这篇博客: Hyperopt工具包 贝叶斯优化中的 四. 随机优化结果展示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • rand_results = pd.DataFrame({'iteration': rand_trials.idxs_vals[0]['x'],
                                'loss': [x['loss'] for x in rand_trials.results],
                                'x': rand_trials.idxs_vals[1]['x']})
    
    plt.figure(figsize = (8, 6))
    plt.plot(rand_results['iteration'], rand_results['x'],  'bo', alpha = 0.5)
    plt.xlabel('Iteration', size = 16); plt.ylabel('x value', size = 16)
    plt.title('Random Sequence of Values', size = 22)
    plt.hlines(minx, 0, 2000, linestyles = '--', colors = 'r')
    

    在这里插入图片描述

    rand_results = rand_results.sort_values('loss', ascending = True).reset_index()
    plt.figure(figsize = (8, 6))
    plt.hist(rand_results['x'], bins = 50, edgecolor = 'k');
    plt.title('Histogram of Random Values')
    plt.xlabel('Value of x')
    plt.ylabel('Count');
    
    print('Best Loss of {:.4f} occured at iteration {}'.format(rand_results['loss'][0], rand_results['iteration'][0]))
    

    Best Loss of -394.7300 occured at iteration 1828
    在这里插入图片描述