在机器学习、深度学习的很多任务中必不可少我们要接触到模型参数调优的工作,这里有很多参数调优的方法,比如最常用最好理解的网格调参,简单带来的就是时间消耗和计算量的增加,今天给大家推荐一款非常不错的超参数优化模块hyperparameter_hunter,我也是最近才接触到的这款神器,实践使用了一下感觉还是很不错的,值得推荐学习一下,这里给出来一些我的学习理解和实践demo。

相应的介绍和说明我都放在代码里面了,可以有选择性地去学习使用,下面是具体的实现内容:

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能: hyperparameter_hunter 超参数优化模块实践官方地址:
https://github.com/HunterMcGushion/hyperparameter_hunter文档地址:
https://hyperparameter-hunter.readthedocs.io如何使用HyperparameterHunter:
不要将HyperparameterHunter视为另一个优化库,只有在它进行超参数优化时才会显示出来。当然,它会进行优化,
但最好将HyperparameterHunter视为个人机器学习工具箱/助手。
使用HyperparameterHunter越多,结果就越好。如果你只是用它来进行优化,当然,它会做你想要的,但这就错过了
HyperparameterHunter。
如果一直在项目的整个过程中使用它进行实验和优化,那么当决定进行超参数优化时,HyperparameterHunter已经
记录了已经完成的所有操作,而且当HyperparameterHunter做了非凡的事情时。它不会像其他库一样从头开始优化。
它会从已经完成的所有实验和之前的优化轮次开始。个人理解:
该模块的一大特点是每一次的实验所产生的数据结果、所使用的的脚本等都被存储下来,实验结果中含有匹配的键,基于
该键值可以从结果文件中抽取所需的结果数据hyperparameter_hunter输出文件结构:
实验会将文件添加到每个HyperparameterHunterAssets / Experiments子目录中,该子目录由experiment_id命名
每个实验还会向HyperparameterHunterAssets / Leaderboards / GlobalLeaderboard.csv添加一个条目
自定义通过Environment的file_blacklist和do_full_save kwargs创建的文件HyperparameterHunterAssets
|   Heartbeat.log
|
└───Experiments
|   |
|   └───Descriptions
|   |   |   <Files describing Experiment results, conditions, etc.>.json
|   |
|   └───Predictions<OOF/Holdout/Test>
|   |   |   <Files containing Experiment predictions for the indicated dataset>.csv
|   |
|   └───Heartbeats
|   |   |   <Files containing the log produced by the Experiment>.log
|   |
|   └───ScriptBackups
|       |   <Files containing a copy of the script that created the Experiment>.py
|
└───Leaderboards
|   |   GlobalLeaderboard.csv
|   |   <Other leaderboards>.csv
|
└───TestedKeys
|   |   <Files named by Environment key, containing hyperparameter keys>.json
|
└───KeyAttributeLookup|   <Files linking complex objects used in Experiments to their hashes>
'''from hyperparameter_hunter import Environment, CVExperiment, BayesianOptPro, Integer, Real, Categorical
from hyperparameter_hunter import optimization as opt
from hyperparameter_hunter.utils.learning_utils import get_breast_cancer_data
from xgboost import XGBClassifier
import os
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import StratifiedKFold
from keras.wrappers.scikit_learn import *
from keras.callbacks import *
from keras.layers import *
from sklearn.svm import LinearSVC
from sklearn.ensemble import *#结果数据存储路径
resDir='demoResult/'
if not os.path.exists(resDir):os.makedirs(resDir)def func1():'''环境使用hyperparameter_hunter的实例化都是从环境的创建初始化开始的'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],  #sklearn.metrics 相关的指标都可以cv_type=StratifiedKFold,    #sklearn.model_selection 相关的策略都可以cv_params=dict(n_splits=5, shuffle=True, random_state=32))def func2():'''独立实验分析【XGBClassifier分类器模型+环境】'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],  #sklearn.metrics 相关的指标都可以cv_type=StratifiedKFold,    #sklearn.model_selection 相关的策略都可以cv_params=dict(n_splits=5, shuffle=True, random_state=32))experiment = CVExperiment(model_initializer=XGBClassifier,model_init_params=dict(objective='reg:linear', max_depth=3, n_estimators=100, subsample=0.5))def build_fn(input_shape):'''Keras模型参数定义模块'''model = Sequential([Dense(100, kernel_initializer='uniform', input_shape=input_shape, activation='relu'), Dropout(0.5),Dense(1, kernel_initializer='uniform', activation='sigmoid')])  model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])return modeldef func3():'''独立实验分析【KerasClassifier分类器模型+环境】'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],  #sklearn.metrics 相关的指标都可以cv_type=StratifiedKFold,    #sklearn.model_selection 相关的策略都可以cv_params=dict(n_splits=5, shuffle=True, random_state=32))experiment = CVExperiment(model_initializer=KerasClassifier,model_init_params=build_fn, model_extra_params=dict(callbacks=[ReduceLROnPlateau(patience=5)], batch_size=32, epochs=10, verbose=0 ))def func4():'''独立实验分析【SKLearn模型+环境】'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],  #sklearn.metrics 相关的指标都可以cv_type=StratifiedKFold,    #sklearn.model_selection 相关的策略都可以cv_params=dict(n_splits=5, shuffle=True, random_state=32))experiment = CVExperiment(model_initializer=LinearSVC,  model_init_params=dict(penalty='l2', C=0.9) )  ##这里可以换成自己想用的模型模型对应的参数配置信息  def build_fn_opt(input_shape):'''Keras模型参数定义模块【调优】'''model = Sequential([Dense(Integer(50, 150), input_shape=input_shape, activation='relu'),Dropout(Real(0.2, 0.7)),Dense(1, activation=Categorical(['sigmoid', 'softmax']))])model.compile(optimizer=Categorical(['adam', 'rmsprop', 'sgd', 'adadelta']),loss='binary_crossentropy', metrics=['accuracy'])return modeldef func5():'''超参数优化'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],cv_type=StratifiedKFold,cv_params=dict(n_splits=5, shuffle=True, random_state=32))optimizer = opt.RandomForestOptPro(iterations=7)optimizer.forge_experiment(model_initializer=KerasClassifier,model_init_params=build_fn_opt,model_extra_params=dict(callbacks=[ReduceLROnPlateau(patience=Integer(5, 10))],batch_size=Categorical([32, 64]),epochs=10, verbose=0))optimizer.go()def func6():'''超参数优化'''data = load_breast_cancer()df = pd.DataFrame(data=data.data, columns=data.feature_names)df['target'] = data.targetenv = Environment(train_dataset=df,results_path=resDir, metrics=['roc_auc_score'],cv_type=StratifiedKFold,cv_params=dict(n_splits=5, shuffle=True, random_state=32))optimizer = opt.DummyOptPro(iterations=42)optimizer.forge_experiment(model_initializer=AdaBoostClassifier,  # (Or any of the dozens of other SKLearn algorithms)model_init_params=dict(n_estimators=Integer(75, 150),learning_rate=Real(0.8, 1.3),algorithm='SAMME.R'))optimizer.go()if __name__ == '__main__':func1()func2()func3()func4()func5()func6()

这里我们以func1()为例简单进行说明,这个模块的使用与我以往使用到的模块有所不同, 以往的模块在执行完成计算之后都会有大量的结果输出,这里是没有的,func1的运行结果如下所示:

运行结束后,代码的统计目录多了demoResult文件夹,进入文件夹后的文件截图如下所示:

进入HyperparameterHunterAssets文件夹后的文件截图如下所示:

进入KeyAttributeLookup文件夹后的文件截图如下所示:

可以看到,这个模块与以往模块不同点,它不仅在模型的每次训练计算过程中会保存交叉验证试验的参数数据和评价指标数据,还保存下来了本次模型训练所用的数据集【存储在train_dataset文件夹中】,这个对于复现实验来说是非常有帮助的。

简单看了一下官方的教程和说明,发现该模块还有一个很强大的地方在于:如果使用该模块有一定的时间积累后, 模型的参数优化会越来越快,因为它不会像简单笨拙的网格调参一样,每次都是从头开始计算,因为它会在每次实验结束后保存实验的相关数据,在参数优化计算的过程中它会从上一次最优的参数开始计算,个人感觉这一点就是比较强大的了。

至于更多地功能后面会再找时间去挖掘和实践,今天就先到这里,先回家了!

hyperparameter_hunter 超参数优化模块实践相关推荐

  1. Python 机器学习 | 超参数优化 黑盒(Black-Box)非凸优化技术实践

    文章目录 一.关键原理 二.Python 实践 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一.关键原理 为什么要做超参数优化? 机器学习建模预测时,超参数是用 ...

  2. 超参数优化(网格搜索和贝叶斯优化)

    超参数优化 1 超参数优化 1.1 网格搜索类 1.1.1 枚举网格搜索 1.1.2 随机网格搜索 1.1.3 对半网格搜索(Halving Grid Search) 1.2 贝叶斯超参数优化(推荐) ...

  3. 【机器学习】算法模型自动超参数优化方法

    什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...

  4. 使用Optuna的XGBoost模型的高效超参数优化

    介绍 : (Introduction :) Hyperparameter optimization is the science of tuning or choosing the best set ...

  5. 【机器学习】五种超参数优化技巧

    转载:我不爱机器学习 超参数是用于控制学习过程的不同参数值,对机器学习模型的性能有显著影响. 超参数优化是找到超参数值的正确组合,以在合理的时间内实现数据的最大性能的过程 1 数据处理 import ...

  6. 机器学习模型的超参数优化用于分子性质预测

    在<预测化学分子的nlogP--基于sklearn, deepchem, DGL, Rdkit的图卷积网络模型>中简单介绍了sklearn模型的使用方法. 现在来介绍一下,如何对sklea ...

  7. 神经网络中的网络优化和正则化(三)之超参数优化

    转载请注明出处:https://thinkgamer.blog.csdn.net/article/details/101033047 博主微博:http://weibo.com/234654758 G ...

  8. [机器学习] 超参数优化介绍

    很多算法工程师戏谑自己是调参工程师,因为他们需要在繁杂的算法参数中找到最优的组合,往往在调参的过程中痛苦而漫长的度过一天.如果有一种方式可以帮助工程师找到最优的参数组合,那一定大有裨益,贝叶斯超参优化 ...

  9. 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]

      这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看.      训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...

  10. 全网最全:机器学习算法模型自动超参数优化方法汇总

    什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...

最新文章

  1. C语言---二分法搜索
  2. 简谈-Python一些常用的爬虫技巧
  3. Intent进阶 和 Intent-filter 学习笔记
  4. 编写你的第一个 Django 应用,第 1 部分
  5. 1000道Python题库系列分享19(81道填空判断题)
  6. POJ - 2392 朴素多重背包 + 贪心 WA与AC代码细节分析
  7. 像 C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?
  8. 手机照片局部放大镜_拼音输入法哪个最好?百度手机输入法——最受年轻人喜爱...
  9. 【模拟电子技术Analog Electronics Technology 14】——集成运放中的单元电路 之 集成运放的输入级:长尾式差放各种接法的参数分析
  10. 基于STM32的电量采集系统
  11. C语言ctype常用方法
  12. SpringBoot2.x 集成 腾讯云短信
  13. (Matlab)复现《改进NSGA_II算法求解考虑运输约束的柔性作业车间节能调度问题》中的交叉操作
  14. 10.24程序员节日快乐
  15. unityshader中的顶点着色器与片段(元)着色器
  16. C语言中关键字const、typedef
  17. Android使用搜狗输入法表情问题
  18. 翼龙贷——优化经验分享
  19. Arcgis影像镶嵌数据集色彩平衡遇到的问题
  20. 神经网络模型--数学建模

热门文章

  1. 如何减小Exe, DLL 的大小
  2. Android基础控件EditText
  3. 利用二层端口安全防止两个三层交换机长距离光纤线路被乱接测试
  4. ListView 复用学习
  5. 深入浅出数据中心里的OpenStack
  6. CentOS 下安装 Nginx
  7. 将序列设置为字段的默认值 - oracle
  8. GRUB 和 GRUB2 的区别
  9. Spark—local模式环境搭建
  10. crmjs区分窗口是否是高速编辑(2)