数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例

这篇具有很好参考价值的文章主要介绍了数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Optuna库的优势

        对比bayes_opt和hyperoptOptuna不仅可以衔接到PyTorch等深度学习框架上,还可以与sklearn-optimize结合使用,这也是我最喜欢的地方,Optuna因此特性可以被使用于各种各样的优化场景。

数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例,数据分析,数据分析,随机森林,笔记,数据挖掘,python 

2. 导入必要的库及加载数据

        用的是sklearn自带的房价数据,只是我把它保存下来了。

import optuna
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold,cross_validate
print(optuna.__version__)
from sklearn.ensemble import RandomForestRegressor as RFR
data = pd.read_csv(r'D:\2暂存文件\Sth with Py\贝叶斯优化\data.csv')
X = data.iloc[:,0:8]
y = data.iloc[:,8]

3. 定义目标函数与参数空间

        Optuna相对于其他库,不需要单独输入参数或参数空间,只需要直接在目标函数中定义参数空间即可。这里以负均方误差为损失函数。

def optuna_objective(trial) :
    # 定义参数空间
    n_estimators = trial.suggest_int('n_estimators',10,100,1)
    max_depth = trial.suggest_int('max_depth',10,50,1)
    max_features = trial.suggest_int('max_features',10,30,1)
    min_impurtity_decrease = trial.suggest_float('min_impurity_decrease',0.0, 5.0, step=0.1)

    # 定义评估器
    reg = RFR(n_estimators=n_estimators,
              max_depth=max_depth,
              max_features=max_features,
              min_impurity_decrease=min_impurtity_decrease,
              random_state=1412,
              verbose=False,
              n_jobs=-1)

    # 定义交叉过程,输出负均方误差
    cv = KFold(n_splits=5,shuffle=True,random_state=1412)
    validation_loss = cross_validate(reg,X,y,
                                     scoring='neg_mean_squared_error',
                                     cv=cv,
                                     verbose=True,
                                     n_jobs=-1,
                                     error_score='raise')
    return np.mean(validation_loss['test_score'])

4.  定义优化目标函数

        在Optuna中我们可以调用sampler模块进行选用想要的优化算法,比如TPE、GP等等。

def optimizer_optuna(n_trials,algo):

    # 定义使用TPE或GP
    if algo == 'TPE':
        algo = optuna.samplers.TPESampler(n_startup_trials=20,n_ei_candidates=30)
    elif algo == 'GP':
        from optuna.integration import SkoptSampler
        import skopt
        algo = SkoptSampler(skopt_kwargs={'base_estimator':'GP',
                                          'n_initial_points':10,
                                          'acq_func':'EI'})
    study = optuna.create_study(sampler=algo,direction='maximize')
    study.optimize(optuna_objective,n_trials=n_trials,show_progress_bar=True)

    print('best_params:',study.best_trial.params,
              'best_score:',study.best_trial.values,
              '\n')

    return study.best_trial.params, study.best_trial.values

5. 执行部分

import warnings
warnings.filterwarnings('ignore',message='The objective has been evaluated at this point before trails')
optuna.logging.set_verbosity(optuna.logging.ERROR)
best_params, best_score = optimizer_optuna(200,'TPE')

6. 完整代码

import optuna
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold,cross_validate
print(optuna.__version__)
from sklearn.ensemble import RandomForestRegressor as RFR

data = pd.read_csv(r'D:\2暂存文件\Sth with Py\贝叶斯优化\data.csv')
X = data.iloc[:,0:8]
y = data.iloc[:,8]

def optuna_objective(trial) :
    # 定义参数空间
    n_estimators = trial.suggest_int('n_estimators',10,100,1)
    max_depth = trial.suggest_int('max_depth',10,50,1)
    max_features = trial.suggest_int('max_features',10,30,1)
    min_impurtity_decrease = trial.suggest_float('min_impurity_decrease',0.0, 5.0, step=0.1)

    # 定义评估器
    reg = RFR(n_estimators=n_estimators,
              max_depth=max_depth,
              max_features=max_features,
              min_impurity_decrease=min_impurtity_decrease,
              random_state=1412,
              verbose=False,
              n_jobs=-1)

    # 定义交叉过程,输出负均方误差
    cv = KFold(n_splits=5,shuffle=True,random_state=1412)
    validation_loss = cross_validate(reg,X,y,
                                     scoring='neg_mean_squared_error',
                                     cv=cv,
                                     verbose=True,
                                     n_jobs=-1,
                                     error_score='raise')
    return np.mean(validation_loss['test_score'])

def optimizer_optuna(n_trials,algo):

    # 定义使用TPE或GP
    if algo == 'TPE':
        algo = optuna.samplers.TPESampler(n_startup_trials=20,n_ei_candidates=30)
    elif algo == 'GP':
        from optuna.integration import SkoptSampler
        import skopt
        algo = SkoptSampler(skopt_kwargs={'base_estimator':'GP',
                                          'n_initial_points':10,
                                          'acq_func':'EI'})
    study = optuna.create_study(sampler=algo,direction='maximize')
    study.optimize(optuna_objective,n_trials=n_trials,show_progress_bar=True)

    print('best_params:',study.best_trial.params,
              'best_score:',study.best_trial.values,
              '\n')

    return study.best_trial.params, study.best_trial.values

import warnings
warnings.filterwarnings('ignore',message='The objective has been evaluated at this point before trails')
optuna.logging.set_verbosity(optuna.logging.ERROR)
best_params, best_score = optimizer_optuna(200,'TPE')








数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例,数据分析,数据分析,随机森林,笔记,数据挖掘,python

 文章来源地址https://www.toymoban.com/news/detail-652495.html

到了这里,关于数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Meta分析的选题与文献计量分析CiteSpace应用丨R语言Meta分析【数据清洗、精美作图、回归分析、诊断分析、不确定性及贝叶斯应用】

    目录 ​专题一、Meta分析的选题与文献计量分析CiteSpace应用 专题二、Meta分析与R语言数据清洗及相关应用 专题三、R语言Meta分析与精美作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析与进阶 专题六、R语言Meta分析的不确定性及贝叶斯应用 专题七、深度拓展机器学习

    2024年02月15日
    浏览(37)
  • python-大数据分析-基于大数据的QQ音乐数据分析系统设计与实现

    DESIGN DESCRIPTION After hundreds of years of development of digital music market at home and abroad, the total number of music works collected has reached a considerable degree. Faced with such a large number of music works, how to let users hear their favorite music works more conveniently and efficiently is a matter that music platforms must consider, and

    2024年02月03日
    浏览(30)
  • 基于大数据的旅游数据分析系统的设计与实现

    基于大数据的旅游数据分析系统的设计与实现 摘    要 网络技术的不断发展,使网络成为人们的日常生活中不可缺少的一部分,而旅游数据分析系统是网络的一种新型体现,它以其特有的便捷和快速的特点得到了广泛的认可。当前的旅游数据分析系统不仅没有建立起整体的

    2024年02月06日
    浏览(45)
  • 基于API的视频分析:实现视频数据的可视化分析

    作者:禅与计算机程序设计艺术 在当今信息化的社会中,视频监控已经成为了人们生活中不可或缺的一部分。同时,视频分析也成为了有效决策、安全监控等方面的重要手段。本文旨在通过基于API的视频分析,实现视频数据的可视化分析,为相关领域提供技术支持。 引言

    2024年02月13日
    浏览(26)
  • 项目分享:基于大数据的股票数据分析系统设计与实现

    A. 研究背景和意义 随着互联网和金融行业的发展,股票市场已成为重要的投资渠道,股票数据分析技术也成为了投资决策的重要依据。基于大数据技术的股票数据分析系统可以实现对股票市场的全面分析和预测,对投资者的决策提供有力的支持。因此,开发一套基于大数据的

    2024年02月02日
    浏览(27)
  • 基于Hadoop的电商数据分析系统设计与实现

    基于Hadoop的电商数据分析系统设计与实现 Design and Implementation of E-commerce Data Analysis System based on Hadoop 目录 2 摘要 3 3 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的与意义 5 1.3 现有研究综述 6 第二章 Hadoop技术介绍 8 2.1 Hadoop概述 8 2.2 Hadoop生态系统 9 2.3 Hadoop数据处理模型 10 第

    2024年02月04日
    浏览(53)
  • 基于Hadoop的京东商城数据分析的研究与实现

    题目 基于 Hadoop 的京东商城数据分析的研究与实现 1. 课题研究立项依据 (1)课题来源 随着互联网信息技术的发展,企业商务模式也发生了翻天覆地的变化,很多传统企业都把目光投向了互联网电子商务。近年来,越来越多的电子商务平台的诞生,引起了电子商务业内的广泛

    2024年02月06日
    浏览(35)
  • 基于Python+django影片数据爬取与数据分析设计与实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 2022-2024年

    2024年02月05日
    浏览(43)
  • BS1066-基于大数据爬虫实现互联网研发岗位数据分析平台

    本基于大数据爬虫实现互联网研发岗位数据分析平台,系统主要采用java,互联网爬虫技术,动态图表echarts,springboot,mysql,mybatisplus,岗位推荐算法,实现基于互联网招聘岗位实现针对用户的岗位推荐, 系统提供招聘岗位网站前台,系统岗位数据分析可视化平台展示等功能

    2024年02月13日
    浏览(34)
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》

    启动hadoop图形化界面 启动hive 1、配置免密登录 vim core-site.xml hdfs-site.xml 1、关闭防火墙 2、初始化 3、配置启动用户 4、启动 5、访问 6、配置环境变量方便启动 卸载Centos7自带mariadb 配置文件 初始化表 1、拉取sqoop 2、配置 3、加入mysql的jdbc驱动包 修改yarn-site.xml 重启 1、hive创建数

    2024年02月04日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包