1、摘要

本文主要讲解:使用optuna自动调参框架对lgb的超参进行优化
主要思路:

  1. 设置超参数范围
  2. 设置调参要运行的方法
  3. 使用optuna进行调参
  4. 输出最优参数,使用最优参数进行调参
  5. 保存调参记录

2、数据介绍

请私聊

3、相关技术

主要的调参原理如下:
1 采样算法
利用 suggested 参数值和评估的目标值的记录,采样器基本上不断缩小搜索空间,直到找到一个最佳的搜索空间,其产生的参数会带来更好的目标函数值。
2 剪枝算法
自动在训练的早期(也就是自动化的 early-stopping)终止无望的 trial

4、完整代码和步骤

主运行程序入口

import lightgbm as lgb
import numpy as np
import optuna
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
import pandas as pd
def pdReadCsv(file, sep):try:data = pd.read_csv(file, sep=sep, encoding='utf-8', error_bad_lines=False, engine='python')return dataexcept:try:data = pd.read_csv(file, sep=sep, encoding='gb18030', error_bad_lines=False, engine='python')return dataexcept:data = pd.read_csv(file, sep=sep, encoding='gbk', error_bad_lines=False, engine='python')return datasrc = 'models\\'K = 5
seed = 1234
skf = KFold(n_splits=K, shuffle=True, random_state=seed)train_path = r'data.csv'
df_train = pdReadCsv(train_path, ',')def load_data():X_train = df_train.drop('度', axis=1)y_train = df_train['度']return X_train, y_train, X_train, y_traindef objective(trial):params = {'nthread': -1, 'max_depth': trial.suggest_int('max_depth', 10, 100),'learning_rate': trial.suggest_uniform('learning_rate', 0, 1),'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0, 1),'num_leaves': trial.suggest_int('num_leaves', 10, 100), 'objective': 'regression','feature_fraction': trial.suggest_uniform('feature_fraction', 0, 1), 'lambda_l1': 0,'lambda_l2': 0, 'bagging_seed': 100, 'metric': ['rmse']}oof1 = np.zeros(len(X_train))for n, (train_index, val_index) in enumerate(skf.split(X_train, y_train)):print("fold {}".format(n))X_tr, X_val = X_train.iloc[train_index], X_train.iloc[val_index]y_tr, y_val = y_train.iloc[train_index], y_train.iloc[val_index]lgb_train = lgb.Dataset(X_tr, y_tr)lgb_val = lgb.Dataset(X_val, y_val)clf = lgb.train(params, lgb_train, num_boost_round=88, valid_sets=[lgb_train, lgb_val])oof1[val_index] = clf.predict(X_val, num_iteration=clf.best_iteration)mse = mean_squared_error(y_train, oof1)print('train_score : ', mse)return mseX_train, y_train, X_test, y_test = load_data()
study = optuna.create_study(direction='minimize')
n_trials = 89
study.optimize(objective, n_trials=n_trials)
print(study.best_value)
best = study.best_params
df = study.trials_dataframe(attrs=('number', 'value', 'params', 'state'))
df.to_csv('params.csv')
print(best)
params = {'nthread': -1, 'max_depth': best['max_depth'],'learning_rate': best['learning_rate'], 'bagging_fraction': best['bagging_fraction'],'num_leaves': best['num_leaves'], 'objective': 'regression','feature_fraction': best['feature_fraction'], 'lambda_l1': 0,'lambda_l2': 0, 'bagging_seed': 100, 'metric': ['rmse']}
train_index = np.arange(0, X_train.shape[0] - 10)
val_index = np.arange(X_train.shape[0] - 10, X_train.shape[0])
X_tr, X_val = X_train.iloc[train_index], X_train.iloc[val_index]
y_tr, y_val = y_train.iloc[train_index], y_train.iloc[val_index]
lgb_train = lgb.Dataset(X_tr, y_tr)
lgb_val = lgb.Dataset(X_val, y_val)
clf = lgb.train(params, lgb_train, num_boost_round=88, valid_sets=[lgb_train, lgb_val])
oof1 = np.zeros(len(X_train))
oof1[val_index] = clf.predict(X_val, num_iteration=clf.best_iteration)
mse = mean_squared_error(y_train, oof1)
print('train_score : ', mse)
clf.save_model(src + 'ane.pkl')

保存超参数调优记录,加在study调参完成之后

df = study.trials_dataframe(attrs=('number', 'value', 'params', 'state'))
df.to_csv('params.csv')

如果有问题或需要帮忙请私聊

5、学习链接

调参神器optuna学习笔记

optuna自动调参框架对lgb的超参进行优化相关推荐

  1. 自动特征工程、NAS、超参调优和模型压缩,微软开源的NNI一库搞定!

    点击我爱计算机视觉标星,更快获取CVML新技术 2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 GitHub 上获得 3.8 ...

  2. Keras Tuner自动调参工具使用入门教程

    主体是翻译的Keras Tuner的说明:https://keras-team.github.io/keras- tuner/documentation/tuners/ github地址:https: ...

  3. 【超全面】机器学习中的超参优化方法总结

    目录 1. 什么是超参数 2. 超参数类型 3. 主流超参优化方法 (1)手动调参 缺点: python代码:(例子) 手动调参 参数的重要性顺序 超参具体如何影响模型性能 超参合适的范围 (2)网格 ...

  4. 使用Ray Tune自动调参

    文章目录 前言 一.Ray Tune是什么? 二.使用步骤 1.安装包 2.引入库 3.读入数据(与Ray Tune无关) 4.构建神经网络模型(与Ray Tune无关) 5.模型的训练和测试(与Ra ...

  5. 调参到头秃?你需要这份自动超参搜索技术攻略

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要13分钟Follow小博主,每天更新前沿干货 来源:PaperWeekly本文约4845字,建议阅读9分钟本文介绍了自动超参搜索的系统架构及技 ...

  6. 让AI自动调参,才是百度无人车的进化方式:适应环境全靠自己 | 论文

    车栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI  自动驾驶汽车,需要应对各式各样的路况,工作环境是每时每刻在变化的. 所以,训练好L4级的自动驾驶系统并不简单.需要依赖奖励函数 (R ...

  7. 微软自动调参工具—NNI安装与快速上手,AutoML必备工具

    文章目录 概述 直观的看看里面有什么 安装方法 NNI 快速入门与超参优化 设置超参数的搜索范围 配置config.yaml 听说点进蝈仔帖子的都喜欢点赞加关注~~ 老规矩官网送上: https:// ...

  8. Auto ML自动调参

    Auto ML自动调参 本文介绍Auto ML自动调参的算法介绍及操作流程. 操作步骤 登录PAI控制台. 单击左侧导航栏的实验并选择某个实验. 本文以雾霾天气预测实验为例. 在实验画布区,单击左上角 ...

  9. sklearn快速入门教程:(四)模型自动调参

    上个教程中我们已经看到在sklearn中调用机器学习模型其实非常简单.但要获得较好的预测效果则需要选取合适的超参数.在实际的项目中其实也有不少参数是由工程师借助其经验手动调整的,但在许多场景下这种方式 ...

  10. 如何使用hyperopt对xgboost进行自动调参

    本教程重点在于传授如何使用Hyperopt对xgboost进行自动调参.但是这份代码也是我一直使用的代码模板之一,所以在其他数据集上套用该模板也是十分容易的. 同时因为xgboost,lightgbm ...

最新文章

  1. VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络
  2. 钉钉、支付宝合种树,2-4天领证,限量9个名额
  3. linux 命令行(给自己看的)
  4. bzoj 3100 排列
  5. 微软新闻:英雄由此诞生
  6. [C#]关于Distinct与重写IEqualityComparer时得知道的二三事
  7. 洛谷3195(HNOI2008)玩具装箱
  8. MySQL流浪记(六)—— CONCAT到GROUP_CONCAT的沿途风景(图文详解)
  9. 以下哪个不是有效的java变量名,Java程序设计-中国大学mooc-题库零氪
  10. php获取蓝凑云文件列表,php调用蓝奏云下载接口
  11. 一辆汽车让你搞懂springmvc项目结构
  12. 在emacs编辑的文本中插入图片 并直接在文本里显示该图片(转载)
  13. HtmlDocument.ExecCommand() 方法
  14. 服务器系统资源不足瑞友天翼,瑞友天翼 错误提示解决方法
  15. 【Unity3D 灵巧小知识点】☀️ | Unity 移动物体到指定位置的几种方法【精选快捷使用】
  16. 地图索引文件MXD保存到数据库中
  17. 2022年阿里云服务器租用价格表(最新收费标准及活动价格表)
  18. selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: eleme
  19. 什么是MBR/DPT/DBR/BPB?
  20. 很全的电脑专业术语中英文对照

热门文章

  1. 如何在 Excel 中使用 SUMIF 函数?
  2. Java - 过滤器有哪些作用和用法?
  3. 03-什么是Mach-O文件?
  4. 《决战Linux到精通》,你的Linux水平将从入门到入魔「建义收藏」
  5. English-旅游英语及情景对话
  6. Word编辑页码不从第一页开始
  7. Android WiFi 连接 (Connect,no Internet,带叉)
  8. 题解 CF722E 【Research Rover】
  9. android模拟器连接不到本地服务器
  10. seo网站优化技巧_新网站的10个SEO技巧