首页 > 编程问答 >optuna:即使具有相同的 random_state,也会有不同的结果

optuna:即使具有相同的 random_state,也会有不同的结果

时间:2024-07-26 10:38:41浏览次数:10  
标签:python optuna

我试图理解为什么使用 optuna 运行下面的超参数调整代码会给出不同的最佳参数值,即使我使用相同的 random_state = 42 运行完全相同的代码。随机部分从哪里来?

import optuna
import sklearn
from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import cross_val_score

def objective(trial):
    digits = sklearn.datasets.load_digits()
    x, y = digits.data, digits.target
    max_depth = trial.suggest_int("rf_max_depth", 2, 64, log=True)
    max_samples = trial.suggest_float("rf_max_samples", 0.2, 1)
   
    rf_model = RandomForestClassifier(
        max_depth = max_depth,
        max_samples = max_samples,
        n_estimators = 50,
        random_state = 42
        )

    score = cross_val_score(rf_model, x, y, cv=3).mean()
    return score
study = optuna.create_study(direction = "maximize")
study.optimize(objective, n_trials = 3)
trial = study.best_trial

print("Best Score: ", trial.value)
print("Best Params: ")
for key, value in trial.params.items():
    print("  {}: {}".format(key, value))

即使使用相同的 random_state = 42 ,Optuna 在不同的运行中产生不同的结果,是因为 Optuna 维护其内部随机数生成器,独立于的模型或其他库(如 scikit-learn) 。设置 random_state 在的 RandomForestClassifier 中仅确保每次试验使用相同的随机性来初始化模型,但它不会影响 Optuna 搜索超参数空间的方式。

以下是 Optuna 中随机性的一些潜在来源,即使使用固定的 random_state 也会导致不同的结果:

  1. 试验采样: Optuna 使用采样器来确定要评估的超参数空间中的下一个点。即使使用相同的采样器,初始采样点也可能在不同的运行中有所不同,从而导致不同的试验轨迹和不同的最佳超参数。

  2. 并行运行: 如果同时运行多个 Optuna 进程(例如,使用 n_jobs > 1 ),每个进程将独立维护其随机数生成器。这可能会导致不同的试验顺序和结果,即使在每个进程中设置了相同的 random_state

  3. Optuna 版本: Optuna 的不同版本可能会使用不同的采样算法或随机数生成,从而导致不同的结果,即使对于相同的代码和 random_state 也是如此。

要获得更可重复的结果,可以尝试以下操作:

  1. 设置 seed 以获取 Optuna 采样器: 可以通过在创建学习时指定 seed 参数来设置 Optuna 内部随机数生成器的种子。这将确保每次运行都使用相同的随机性进行试验采样。 python study = optuna.create_study(direction="maximize", sampler=optuna.samplers.TPESampler(seed=42))

  2. 禁用并行运行: n_jobs 参数设置为 1 以确保 Optuna 按顺序运行试验。 python study.optimize(objective, n_trials=3, n_jobs=1)

  3. 指定固定的 random_state 以进行交叉验证: 为了在每次试验中获得更一致的交叉验证结果,请在 cross_val_score 函数中也设置 random_state python score = cross_val_score(rf_model, x, y, cv=3, random_state=42).mean()

  4. 使用固定的 Optuna 版本: 在的项目中使用特定的 Optuna 版本可以防止因版本差异而导致的结果发生变化。

请记住,即使采用这些步骤,由于机器学习的随机性,也可能无法获得完全相同的最佳超参数。但是,这些步骤应该可以帮助获得更一致和可重复的结果。

标签:python,optuna
From: 77311398

相关文章

  • python-myStudyList
     1  下载软件1.1下载python最新版本并安装下载地址:百度搜索python官网。WelcometoPython.org。 1.2官网学习网页:PythonTutorials–RealPython   1.3也可以下载集成环境软件Anaconda。 Anaconda软件商城官方正版免费下载(msc23.cn) 2 ......
  • Python语法基础
    基本语句输入input() eg:输出print(内容)注释单行注释:#注释内容多行注释:"""注释内容"""数据类型: 字面量:整型、浮点数、字符串......intfloatstring查看数据类型:type(数据)查看数据类型 转换函数int(x):将x转换成整数类型float(x):将x转......
  • PyTesseract 不提取文本?我是所有这些Python的新手,请需要h3lp
    它不想从图像中提取文本,就像终端保持黑色并带有空格,就像它实际上试图提取文本一样,这是我的代码和图像从PIL导入图像导入pytesseract导入CV2“C:\用户\埃米利亚诺\下载\practic.png”pytesseract.pytesseract.tesseract_cmd="C:\ProgramFiles\Tesseract-OCR\tesseract.exe......
  • Python安装第三方库
    Python安装PILPIL(PythonImagingLibrary)是一个旧的Python库,用于处理图像。然而,PIL已经不再维护,并被一个名为Pillow的库所取代。Pillow是PIL的一个分支,并且完全兼容PIL。建议使用Pillow而不是PIL。pipinstallpillowPython安装moviepymoviepy是一个用于视频编辑的Python库,......
  • 优化Python中图像中的OCR文本检测
    我目前正在用python编写一个程序,该程序获取包含大量文本的图像,将其提取到.txt文件,然后将找到的单词与另一个文件中的单词列表进行比较,并创建一些坐标(根据像素)在图像中找到的单词中,如果找到图像,则会在图像中绘制红色方块。到目前为止,我已经正确处理了坐标部分,在单词周围绘制了......
  • Python保存字典类型数据到文件的三种方法
    1、在Python中使用pickle模块的dump函数将字典保存到文件中importpicklemy_dict={'Apple':4,'Banana':2,'Orange':6,'Grapes':11}#保存文件withopen("myDictionary.pkl","wb")astf:pickle.dump(my_dict,tf)......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-53- 处理面包屑(详细教程)
    1.简介面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑导航的作用是告诉访问者他们在网站中......
  • 如何使用 Python 在 Telegram 中进行标签搜索
    Telegram最近添加了一项新功能,可以在所有公共频道中同时按主题标签进行搜索:https://telegram.org/blog/message-effects-and-more#hashtag-search如何进行此类搜索用蟒蛇?(Telethon,Python-Telegram-Bot,...)我在Telethon文档中找到了这个函数:https://tl.......
  • 使用 Python 构建一个简单的 REST API
    使用Python构建一个简单的RESTAPI简介本文档将引导您使用Python和Flask框架构建一个简单的RESTAPI。我们将创建一个API,用于管理一个虚拟的书籍数据库。准备工作Python环境:确保您的系统上安装了Python3.x。Flask框架:使用pip安装Flask:pipinstallFla......
  • python学习之闭包与装饰器
    一、闭包闭包允许一个函数访问并操作函数外部的变量(即父级作用域中的变量),即使在该函数外部执行。特性:(1)外部函数嵌套内部函数。(2)外部函数可以返回内部函数。(3)内部函数可以访问外部函数的局部变量。defout():print("我是外层")n=10defins():......