首页 > 其他分享 >【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)

【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)

时间:2023-06-20 11:36:02浏览次数:38  
标签:suggest 机器 Optuna study XGBoost trial train optuna test



文章目录

  • 1. optuna简介
  • 2. LGBM和XGBoost调参汇总
  • 2.1 LGBM
  • 2.1.1 定义Objective
  • 2.1.2 调参try
  • 2.1.3 绘图
  • 2.1.4 最佳参数
  • 2.2 XGBOOST
  • 2.2.1 定义Objectove
  • 2.2.2 调参try
  • 2.2.3 绘图
  • 2.2.4 最佳参数


1. optuna简介

在Kaggle比赛的过程中我发现了一个问题(大家的Kernel模型中包含了众多c超参数设置,但是这些参数是如何设置的呢?),并在Discussion中提出了我的问题,并得到了众多大佬的回答,如下:

【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)_参数设置


关于回答我汇总后发现都提到了关于optuna库的使用,optuna是什么呢?optuna是一个使用python编写的超参数调节框架。一个极简的 optuna 的优化程序中只有三个最核心的概念,目标函数(objective),单次试验(trial),和研究(study). 其中 objective 负责定义待优化函数并指定参/超参数数范围,trial 对应着 objective 的单次执行,而 study 则负责管理优化,决定优化的方式,总试验的次数、试验结果的记录等功能。

下面举一个简单的栗子,有助于大家的理解:

定义【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)_数据集_02,求【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)_数据集_03取得最大值时,【机器学习】Optuna机器学习模型调参(LightGBM、XGBoost)_数据集_04的取值?

import optuna
 
def objective(trial):
    x = trial.suggest_uniform('x', -10, 10)
    y = trial.suggest_uniform('y', -10, 10)
    return (x + y) ** 2
 
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)
 
print(study.best_params)
print(study.best_value)

2. LGBM和XGBoost调参汇总

2.1 LGBM

2.1.1 定义Objective

from lightgbm import LGBMRegressor
import optuna
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split, KFold
import optuna.integration.lightgbm as oplgb

def objective(trial):
    X_train, X_test, y_train, y_test=train_test_split(data, target, train_size=0.3)# 数据集划分
    param = {
        'metric': 'rmse', 
        'random_state': 48,
        'n_estimators': 20000,
        'reg_alpha': trial.suggest_loguniform('reg_alpha', 1e-3, 10.0),
        'reg_lambda': trial.suggest_loguniform('reg_lambda', 1e-3, 10.0),
        'colsample_bytree': trial.suggest_categorical('colsample_bytree', [0.3,0.4,0.5,0.6,0.7,0.8,0.9, 1.0]),
        'subsample': trial.suggest_categorical('subsample', [0.4,0.5,0.6,0.7,0.8,1.0]),
        'learning_rate': trial.suggest_categorical('learning_rate', [0.006,0.008,0.01,0.014,0.017,0.02]),
        'max_depth': trial.suggest_categorical('max_depth', [5, 7, 9, 11, 13, 15, 17, 20, 50]),
        'num_leaves' : trial.suggest_int('num_leaves', 1, 1000),
        'min_child_samples': trial.suggest_int('min_child_samples', 1, 300),
        'cat_smooth' : trial.suggest_int('cat_smooth', 1, 100)      
    }
    
    lgb=LGBMRegressor(**param)
    lgb.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=100, verbose=False)
    pred_lgb=lgb.predict(X_test)
    rmse = mean_squared_error(y_test, pred_lgb, squared=False)
    return rmse

2.1.2 调参try

study=optuna.create_study(direction='minimize')
n_trials=50 # try50次
study.optimize(objective, n_trials=n_trials)

2.1.3 绘图

optuna.visualization.plot_optimization_history(study)# 绘制
optuna.visualization.plot_parallel_coordinate(study)#
optuna.visualization.plot_param_importances(study)#

2.1.4 最佳参数

params=study.best_params
params['metric'] = 'rmse'

2.2 XGBOOST

2.2.1 定义Objectove

def objective(trial):
    data = train.iloc[:, :-1]
    target = train.target
    train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.3, random_state=42)
    param = {
        'lambda': trial.suggest_loguniform('lambda', 1e-3, 10.0),
        'alpha': trial.suggest_loguniform('alpha', 1e-3, 10.0),
        'colsample_bytree': trial.suggest_categorical('colsample_bytree', [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]),
        'subsample': trial.suggest_categorical('subsample', [0.4, 0.5, 0.6, 0.7, 0.8, 1.0]),
        'learning_rate': trial.suggest_categorical('learning_rate',
                                                   [0.008, 0.009, 0.01, 0.012, 0.014, 0.016, 0.018, 0.02]),
        'n_estimators': 4000,
        'max_depth': trial.suggest_categorical('max_depth', [5, 7, 9, 11, 13, 15, 17, 20]),
        'random_state': trial.suggest_categorical('random_state', [24, 48, 2020]),
        'min_child_weight': trial.suggest_int('min_child_weight', 1, 300),
    }
    model = xgb.XGBRegressor(**param)
    model.fit(train_x, train_y, eval_set=[(test_x, test_y)], early_stopping_rounds=100, verbose=False)
    preds = model.predict(test_x)
    rmse = mean_squared_error(test_y, preds, squared=False)
    return rmse

2.2.2 调参try

study = optuna.create_study(direction='minimize')
n_trials=1
study.optimize(objective, n_trials=n_trials)
print('Number of finished trials:', len(study.trials))
print("------------------------------------------------")
print('Best trial:', study.best_trial.params)
print("------------------------------------------------")
print(study.trials_dataframe())
print("------------------------------------------------")

2.2.3 绘图

optuna.visualization.plot_optimization_history(study).show()
#plot_parallel_coordinate: interactively visualizes the hyperparameters and scores
optuna.visualization.plot_parallel_coordinate(study).show()
'''plot_slice: shows the evolution of the search. You can see where in the hyperparameter space your search
went and which parts of the space were explored more.'''
optuna.visualization.plot_slice(study).show()
optuna.visualization.plot_contour(study, params=['alpha',
                            #'max_depth',
                            'lambda',
                            'subsample',
                            'learning_rate',
                            'subsample']).show()
#Visualize parameter importances.
optuna.visualization.plot_param_importances(study).show()
#Visualize empirical distribution function
optuna.visualization.plot_edf(study).show()

2.2.4 最佳参数

params=study.best_params


标签:suggest,机器,Optuna,study,XGBoost,trial,train,optuna,test
From: https://blog.51cto.com/u_16165815/6521631

相关文章

  • 【计算机算法设计与分析】6-5 最小重量机器设计问题(C++_回溯法/分支限界法)
    问题描述设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。设计一个优先队列式分支限界法,给出总价格不超过d的最小重量机器设计。对于给定的机器部件重量和机器部件价格,设计一个优先队列式分......
  • 行业报告 | AI+制造业赋能,机器视觉开启掘金新大陆(上)
    原创|文BFT机器人01核心要点Al+制造业赋能,META发布SAM助力机器视觉迎来GPT时刻。机器视觉技术使得工业设备能够“看到”它正在进行的操作并进行快速决策,完整机器视觉系统由硬件+软件组成,分别进行成像和图像处理工作。目前,以“AI+人类感知”融合为代表的新兴技术开始逐渐sh......
  • 4自由度并联机器狗实现行走功能
    1.功能说明    本文示例将实现R328a样机4自由度并联机器狗行走的功能。2.电子硬件    在这个示例中,我们采用了以下硬件,请大家参考:主控板Basra主控板(兼容ArduinoUno)‍扩展板Bigfish2.1扩展板‍电池7.4V锂电池    电路连接:机器狗左侧的上下......
  • 呼叫中心解决方案:如何搭建高性价比的智能机器人客服系统
    呼叫中心解决方案涉及的技术领域比较多,智能化需求随着AI技术的快速发展越来越得到重视,本文简单概括搭建高性价比的智能机器人客服系统需要考虑的多个方面。以下是一些关键步骤和建议:明确需求:首先,你需要理解你的业务需求以及你希望机器人客服能够解决的问题。这包括了解你的客户......
  • [机器人]FANUC---MODBUS机器人变量配置
    1、设置机器人IP、主站IP如图1设置图1IP设置2、客服端、端口设置,图2。图2设置客户端3、设置读取当前用户坐标系X、Y、Z、RX、RY、RZ,图3。图3读取当前用户正交坐4、设置读取当前用户坐标系J1、J2、J3、J4、J5、J6,图4。图4读取当前用户关节坐标5、设置读取当前使用用户、工具坐标号,......
  • 机器翻译中的词向量表示:为翻译算法提供更多的信息
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解5.优化与改进机器翻译是人工智能技术的重要应用领域之一,通过利用自然语言处理、机器学习和深度学习等技术,实现对文本的自动翻译。然而,机器翻译领域的研究和应用还面临着一些问题和挑战,如翻译质量不稳定......
  • 机器翻译技术的发展趋势:从API到深度学习
    目录机器翻译技术的发展趋势:从API到深度学习随着全球化的发展,机器翻译技术在各个领域得到了广泛的应用。机器翻译技术的核心是将源语言文本翻译成目标语言文本,其中涉及到语言模型、文本生成模型和翻译模型等多个方面。在过去的几年中,随着深度学习技术的不断发展,机器翻译技术也经......
  • 机器学习算法的实现与优化
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解5.优化与改进6.结论与展望7.附录:常见问题与解答人工智能专家,程序员,软件架构师,CTO,以下是《48.机器学习算法的实现与优化》技术博客文章的文章结构:1.引言1.1.背景介绍机器学习技术的发展历程机......
  • 机器学习中的神经网络:如何创建强大的模型并解决复杂的问题
    目录文章标题:《17."机器学习中的神经网络:如何创建强大的模型并解决复杂的问题"》文章背景介绍:随着人工智能技术的快速发展,神经网络已经成为机器学习领域中最受欢迎的模型之一。神经网络是一种基于深度学习的技术,能够通过多层神经元来学习和提取特征,从而实现复杂的分类、回归和......
  • 让机器更加人性化:深度学习技术在人工智能助手领域的应用
    目录随着人工智能技术的快速发展,人工智能助手领域逐渐成为人们日常生活的一部分。然而,对于如何设计和构建更加人性化、更加智能的人工智能助手,仍然存在着许多挑战。本文将介绍深度学习技术在人工智能助手领域的应用,通过具体实践案例,讲解如何使用深度学习技术来构建更加智能、更加......