HyperGBM如何定义autoML的搜索空间

2023-05-16

HyperGBM学习笔记之如何定义autoML搜索空间

文章目录

  • HyperGBM学习笔记之如何定义autoML搜索空间
  • 前言
  • 一、入门篇
    • 1. 定义需求
    • 2. 需求解析
  • 二、进阶篇
    • 1. 定义参数的搜索范围
    • 2. 构建autoML伪代码
    • 3. HyperGBM定义搜索空间
    • 4. HyperGBM搜索空间展示
    • 5. 结束语


前言

HyperGBM作为一款端到端全Pipeline的autoML开源框架,将数据imputer,特征预处理,模型选择,参数调优,模型ensemble/blending等ML建模的全生命周期步骤都作为了搜索空间中的搜索元素之一,真正意义上完成了端到端的模型构建,本文将带你一起去探索HyperGBM如何定义autoML搜索空间

一、入门篇

首先我们来做一个简单的组合最优解的仿真实验,帮助我们更好的理解HyperGBM框架内部是如何完成空间定义及搜索的。

1. 定义需求

需求如下:找到100以内的素数2个,使得函数F(a,b)=(a+b)/(a-b)的值最大化

示例代码如下:

## define estimator function 
def get_reward(a,b):
    if a == b:
        return 0
    else:
        return (a+b) / (a-b)
## define parameter range 
_prime = [x for x in range(2,100) if not [y for y in range(2,x) if x % y ==0]]
_max = 0
best_a_b = (0,0)
## use double for-function to go through each parameter Combination 
for i in _prime:
    for j in _prime:
        if get_reward(i,j) > _max:
            _max = get_reward(i,j)
            best_a_b = (i,j)
print(f'best score is {_max},best numers is {best_a_b}')

out[]: best reward is 72,best parameter Combination is (73, 71)

2. 需求解析

通过以上实验我们可以看到要想完成一个最优组合解,我们至少需要三步骤,分别是:

  • 定义优化参数范围
  • 定义参数组合评估函数
  • 定义搜索空间遍历算法

现在我们尝试将上面的实验结合到HyperGBM中。

二、进阶篇

1. 定义参数的搜索范围

上面的入门实验中,参数的搜索范围是一个已知的数组,在HyperGBM中定义了很多其他类型的搜索范围函数,分别是:

  • Choice

eg: Choice([1,2,3]),即搜索范围为数组[1,2,3]

  • Int

eg: Int(1,10),等同于randint(1,10),可通过step控制间隔

  • Real

eg: Real(0,1.0),等同于.uniform(0,1.0),可通过step控制间隔,默认为0.01

  • Bool

eg: Bool(),即搜索范围为数组[False,True]

  • ModuleChoice

eg: ModuleChoice(class1,class2),即搜索范围为[class1,class2]

  • Optional

eg: Optional(function),即[None,function],即Optional对应的操作可能会被执行,也可能skip

  • etc…

2. 构建autoML伪代码

我们只需要5步构建一个简单的pipeline,示例如下:
在这里插入图片描述

3. HyperGBM定义搜索空间

这里简单的定义整个搜索空间为数据预处理,特征预处理,算法选择,算法参数选择(实际情况要复杂于此搜索空间):

from hypernets.core.ops import Identity
from hypernets.core.search_space import HyperSpace, Choice

def get_space():
    space = HyperSpace()
    with space.as_default():
        p1 = Choice(['imputer方法1','imputer方法2','imputer方法3'])
        p2 = Choice(['preprocessing方法1','preprocessing方法2'])
        p3 = Choice(['算法1','算法2','算法3'])
        p4 = Choice(['模型参数组合1','模型参数组合2','模型参数组合3'])
        id1 = Identity(p1=p1)
        id2 = Identity(p2=p2)(id1)
        id3 = Identity(p3=p3)(id2)
        id4 = Identity(p4=p4)(id3)
    return space

search_space = get_space()
for hp in search_space.params_iterator:
    print(hp.options)


out[]:
		['imputer方法1', 'imputer方法2', 'imputer方法3']
		['preprocessing方法1', 'preprocessing方法2']
		['算法1', '算法2', '算法3']
		['模型参数组合1', '模型参数组合2', '模型参数组合3']

首先定义了一个搜索空间,通过遍历我们看到框架的大体运行顺序为

input_data → imputer(input_data) → 特征预处理(input_data) → 算法选择(input_data) → 算法参数选择 →
fit模型(获得当前分数) → 继续遍历,获得最优解

获得搜索空间的一个子空间

search_space.random_sample()
sample1 = search_space.vectors
print(sample1)

out[]: [0, 0, 2, 1]

输出对应的操作内容

for hp,index in zip(get_space().params_iterator,sample1):
    print(f'{hp.options[index]}-->',end='')
    
out[]: 'imputer方法1'-->'preprocessing方法1'-->'算法3'-->'模型参数组合2'

4. HyperGBM搜索空间展示

以上内容只是为了更好的去理解搜索空间的概念及如何定义搜索空间,接下来,我们一起来看一下HyperGBM中真实的搜索空间。

from hypergbm.search_space import search_space_general

search_space = search_space_general()
for hp in search_space.params_iterator:
    hp.random_sample()
    print(hp.alias)
search_space.random_sample()
print(search_space.vectors)

out[]:
		'estimator_options.hp_or'
		'numeric_imputer_0.strategy'
		'numeric_scaler_optional_0.hp_opt'
		'Module_LightGBMEstimator_1.boosting_type'
		'Module_LightGBMEstimator_1.num_leaves'
		'Module_LightGBMEstimator_1.max_depth'
		'Module_LightGBMEstimator_1.learning_rate'
		'Module_LightGBMEstimator_1.reg_alpha'
		'Module_LightGBMEstimator_1.reg_lambda'
		[0, 3, 0, 1, 450, 2, 3, 4, 2]

5. 结束语

在构造好了搜索空间后,只是完成了很小的一步,因为你会发现可以搜索的排列组合几乎是不可数的,那么如何在无限多的排列组合中,找到最优解呢,那我们又不得不提搜索算法,一个好的搜索算法可以在相对较短的时间内,获得一个良好的搜索结果。对于HyperGBM来说,支持的搜索算法有进化搜索算法,MCTS(蒙特卡洛树搜索), grid_search, 也支持用户自定义的搜索算法。关于搜索算法的介绍,我们留在下一章介绍。

end. 如果你也对ML/autoML感兴趣,欢迎大家一起学习交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HyperGBM如何定义autoML的搜索空间 的相关文章

  • java 8 根据map 字段值 去重

    java 8 根据map 字段值 去重 span class token class name List span span class token generics span class token punctuation lt span
  • java 8 去重

    span class token comment 取差集 span span class token class name List span span class token generics span class token punct
  • 解读程序员的武侠世界,顶级程序员是内外兼修的大侠,那么你呢?

    在漫天的星河中 xff0c 有这样一颗星 xff0c 他朴实无华 xff0c 却又熠熠生辉 xff0c 照亮了无数人的人生 他就是金庸先生 随着一代大侠的驾鹤西去 xff0c 飞雪连天射白鹿 xff0c 笑书神侠倚碧鸳 xff0c 成为绝响
  • Eclipse使用入门教程

    Eclipse使用入门教程 说起java的IDE xff0c 朗朗上口的无非是Eclipse了 xff0c 假若能熟练Eclipse xff0c 对于我们编写java程序会起到事半功倍的效果 xff0c 大大提高我们工作效率 因此本篇博文
  • Win7 + Ubuntu16.04 双系统安装

    之前安装win7 43 Ubuntu14 04双系统 xff0c 后来换成win10用了一段时间后觉得有些卡 xff0c 而且装双系统装了几次都成功 xff0c 所以又换回了win7系统 xff0c 并重新安装了win7 43 Ubuntu
  • 双系统Ubuntu 引导修复(Boot Repair)

    安装完双系统 xff0c 如果在使用过程中不小心删除了Ubuntu引导向 xff0c 则会导致开机后无法选择进入Ubuntu系统 或者当我们重装了windows系统后 xff0c 也会发现原来的Ubuntu引导不见了 xff0c 当出现这两
  • 数据库为何要有复合主键(多主键)

    最近学习一点数据库的基本知识 xff0c 被一个问题困惑了许久 xff1a 主键是唯一的索引 xff0c 那么为何一个表可以创建多个主键呢 xff1f 其实 主键是唯一的索引 这话有点歧义的 举个例子 xff0c 我们在表中创建了一个ID字
  • @JSONField 注解详解和应用

    讲到 64 JSONField 注解 xff0c 就不得不提到Alibaba 开源的fasejson fastjson是目前java语言中最快的json库 xff0c 比自称最快的jackson速度要快 xff0c 第三方独立测试结果看这里
  • 外部访问docker容器(docker run -p/-P 指令)

    容器中可以运行一些网络应用 xff0c 要让外部也可以访问这些应用 xff0c 可以通过 P xff08 大写 xff09 或 p xff08 小写 xff09 参数来指定端口映射 xff08 1 xff09 当使用 P 标记时 xff0c
  • 解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

    LocalDate LocalTime LocalDateTime 是Java 8开始提供的时间日期API xff0c 主要用来优化Java 8以前对于时间日期的处理操作 然而 xff0c 我们在使用Spring Boot或使用Spring
  • gcc 编译选项

    原来 Os相当于 O2 5 是使用了所有 O2的优化选项 xff0c 但又不缩减代码尺寸的方法 ffunction sections fdata sections Place each function or data item into
  • RYU功能开发(一)从simple switch开始

    对于任意一款控制器 xff0c 想要快速了解其开发机制 xff0c 从转发模块入手无疑是最佳的学习方式 RYU通过App的形式提供了一系列功能模块 xff0c 其中包括使用了OpenFlow作为控制协议的二层交换机控制模块simple sw
  • arm-linux-gcc交叉工具链

    Linux ARM交叉编译工具链制作过程 一 下载源文件 源代码文件及其版本与下载地址 xff1a Binutils 2 19 tar bz2 Index of gnu binutils gcc 4 4 4 tar bz2 Index of
  • 我使用过的Linux命令之cal - 显示日历

    我使用过的Linux命令之cal 显示日历 本文链接 xff1a http codingstandards iteye com blog 807962 xff08 转载请注明出处 xff09 用途说明 cal命令可以用来显示公历 xff08
  • 驼峰式与下划线命名规则

    在实际代码开发过程中 xff0c 代码编写格式清晰与否不仅决定了自己的代码编写与维护成本 xff0c 也直接影响到项目的开发进度 编码中常用的有驼峰法和下划线两种编码格式 xff0c 其中驼峰法常用在面向对象的高层语言中 xff0c 下划线
  • 全图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架

    文章目录 一 前言二 RPC 基础概念1 RPC 是什么 xff1f 2 需要解决什么问题 xff1f 3 有哪些开源实现 xff1f 三 protobuf 基本使用1 基本知识2 使用步骤 四 libevent1 libevent 简介2
  • 针对vue的配置文件

    针对vue的配置文件 我们在根目录下创建一个 vue config js 文件 xff0c 将下方配置下去 module exports 61 区分打包环境与开发环境 process env NODE ENV 61 61 61 39 pro
  • Linux | LVM | 对比三种逻辑卷(Logic Volume)

    概述 为了满足在性能和冗余等方面的需求 xff0c LVM支持了下面三种Logic Volume xff1a Linear Logic Volume 线性逻辑卷Striped Logic Volume 条带化逻辑卷Mirror Logic
  • MySql ERROR 1129

    ERROR 1129 HY000 Host 39 mysql02 39 is blocked because of many connection errors unblock with 39 mysqladmin flush hosts
  • SpringBoot整合Shiro

    Apache Shiro是一个强大且易用的Java安全框架 执行身份验证 授权 密码学和会话管理 相比较Spring Security xff0c shiro有小巧 简单 易上手等的优点 所以很多框架都在使用shiro Shiro包含了三个

随机推荐

  • PB数据窗口对象之Button

    Button 重要属性 Action 属性 该属性是Button 控件最重要的一个属性 在数据窗口画板中 xff0c 可以选择一个按钮有哪个动作 可选的动作都是事先定义好的 xff0c 开发人员没有机会精确定义某个动作的执行 xff0c 只
  • 聊聊前端八股文?

    大家好 xff0c 我是若川 xff0c 点此加我微信进源码群 xff0c 一起学习源码 同时可以进群免费看Vue专场直播 xff0c 有尤雨溪分享 Vue3 生态现状以及展望 前些天 xff0c 我看到 剑指前端offer 一系列文章 x
  • 新手向:前端程序员必学基本技能——调试JS代码

    1前言 大家好 xff0c 我是若川 最近组织了源码共读活动 xff0c 感兴趣的可以加我微信 ruochuan12 参与 xff0c 已进行三个月了 xff0c 大家一起交流学习 xff0c 共同进步 想学源码 xff0c 极力推荐之前我
  • 全新的 Vue3 状态管理工具:Pinia

    大家好 xff0c 我是若川 最近组织了源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列 包含
  • 推荐2022前端必看的新书 《Vue.js设计与实现》

    大家好 xff0c 我是若川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • 面试官问:跨域请求如何携带cookie?

    大家好 xff0c 我是若 川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系
  • 如何写好技术文章(看张鑫旭老师的直播总结

    大家好 xff0c 我是若川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • Element使用的async-validator表单校验库源码超详细解析

    大家好 xff0c 我是若川 持续组织了8个月源码共读活动 xff0c 感兴趣的可以 点此加我微信ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • 我捡到宝了!2022版前端面试上岸手册,最新最细致!

    大裁员背景下 xff0c 没什么比辞职后找不到工作更扎心 xff01 在行情好转前 xff0c 前端程序员只能 猥琐发育 xff0c 不轻易跳槽 xff0c 同时要修炼内功 xff1a 对八股文 底层源码 重点项目等进行查缺补漏 xff0c
  • 点击页面元素跳转IDE对应代码,试试这几个工具!

    大家好 xff0c 我是若川 我持续组织了近一年的源码共读活动 xff0c 感兴趣的可以 点此扫码加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整
  • 为什么说组件库的源码非常值得学习?

    大家好 xff0c 我是若川 最近来了一些新朋友 xff0c 感谢大家关注 相比于原生 JS 等源码 我们或许更应该学习正在使用的组件库的源码 xff08 如 xff1a element antd vant semi arco tdesig
  • 写一个Vue DevTools,让开发体验飞一会

    大家好 xff0c 我是若川 我持续组织了近一年的源码共读活动 xff0c 感兴趣的可以 点此扫码加我微信 lxchuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体
  • 偷偷盘点前端面试官才知道的进阶秘籍

    很多人都说35岁是程序员的职业尽头 而我们部门leader是位80年的大哥 xff0c 曾经是字节3 1大佬 xff0c 今年43岁了依然独当一面 于是 xff0c 我向他请教了 不被淘汰 的秘籍 他总结了两点 xff1a 1 努力修炼内功
  • Facebook CrypTen安全多方计算(MPC)框架介绍及核心代码分析

    简单介绍 CrypTen是Facebook在2019年10月开源的 用于多方安全计算 MPC 的框架 其底层依赖于深度学习框架PyTorch 官网说明见 xff1a https ai facebook com blog crypten a
  • 开源软件Asterisk:386变身交换机

    有关开源软件最令人激动的事情之一就是其创建超越传统的IT基础架构的应用程序的方式 一个恰当的例子是称作 Asterisk 的电话应用程序 Asterisk是一种功能非常齐全的应用程序 xff0c 提供了许多电信功能 也许它最著名的应用是当作
  • 2016.9---2017.1半年总,外派工作的感觉真爽 (补17年1月)

    16年8月份 xff0c 第二版订餐系统上线 xff0c 我就着手出去上班 xff0c 8月初提交简历后 xff0c 面试就一发不可收 xff0c 一直到12月初才出去 xff0c 历时四个月 xff0c 期间边学习边面试 xff0c 但这
  • gerrit - first commit

    最近公司有新项目 xff0c 已经让领导帮我把clone和push的权限都开通了 xff0c 但是在push的时候还是提交失败 xff0c 错误信息如下 xff1a git push origin master Counting objec
  • AutoML领域的一把利器---HyperGBM

    AutoML领域的一把利器 HyperGBM 文章目录 AutoML领域的一把利器 HyperGBM 前言一 何为AutoML xff1f 二 如何使用HyperGBM1 引入库2 读入数据3 初始化make experiment4 调用m
  • AutoML工具之HyperGBM介绍

    HyperGBM介绍 本文章主要是对autoML开源框架HyperGBM的一个介绍 文章目录 HyperGBM介绍一 关于HyperGBM二 功能特性总览二 如何安装HyperGBM三 HyperGBM入门样例1 准备数据集2 创建实验并进
  • HyperGBM如何定义autoML的搜索空间

    HyperGBM学习笔记之如何定义autoML搜索空间 文章目录 HyperGBM学习笔记之如何定义autoML搜索空间前言一 入门篇1 定义需求2 需求解析 二 进阶篇1 定义参数的搜索范围2 构建autoML伪代码3 HyperGBM定