糖药病数据集分类_使用optuna和mlflow进行心脏病分类器调整

糖药病数据集分类

背景 (Background)

Data science should be an enjoyable process focused on delivering insights and real benefits. However, that enjoyment can sometimes get lost in tools and processes. Nowadays it is important for an applied data scientist to be comfortable using tools and software for data/code versioning, reproducible model development, experiment tracking, and model inspection — to name a few!

数据科学应该是一个令人愉悦的过程,专注于提供见解和实际收益。 但是,这种享受有时会在工具和过程中迷失。 如今,重要的是,对于应用数据科学家来说,使用工具和软件进行数据/代码版本控制,可重现的模型开发,实验跟踪和模型检查非常重要!

The purpose of this article is to briefly touch upon reproducible model development and experiment tracking through a worked example for tuning a Random Forest classifier using Optuna and mlflow.

本文的目的是通过一个使用Optuna和mlflow调整随机森林分类器的实例简要讨论可再现模型的开发和实验跟踪。

心脏病数据和预处理 (The heart disease data and preprocessing)

This example uses the heart disease data available in the UCI ML archive. In previous work I describe some processing done to create a semi-cleaned dataset: developing a model for heart disease prediction using pycaret. In the .csv file provided for this short worked example, I have additionally converted any categorical features with two values into a single binary feature where for feature_name_x the _x suffix indicates the level represented by a value of 1. The target to predict is heart disease (hd_yes) and we want to tune a Random Forest classifier to do so.

本示例使用UCI ML存档中可用的心脏病数据。 在之前的工作中,我描述了创建半清洁数据集的一些处理过程: 使用pycaret开发用于心脏病预测的模型 。 在为该简短示例提供的.csv文件中,我另外将具有两个值的所有分类特征转换为单个二进制特征,其中对于feature_name_x_x后缀表示值1表示的水平。要预测的目标是心脏病( hd_yes ),我们想调整随机森林分类器。

After loading the data and creating the feature matrix and target vector, I created a preprocessing pipeline. For numeric features missing values were imputed using the median and then scaled. For binary features missing values were imputed using the mode. For a three-level categorical feature chest pain, missing values were treated as a separate category and leave-one-out target encoding applied. Finally, these processing steps were wrapped up into a single processing pipeline.

加载数据并创建特征矩阵和目标矢量后,我创建了预处理管道。 对于数字特征,使用中位数估算缺失值,然后进行缩放。 对于二进制特征,使用该模式估算缺失值。 对于三级分类的特征性胸痛,缺失值被视为一个单独的类别,并应用了遗忘的目标编码 。 最后,这些处理步骤被包装到单个处理管道中。

使用Optuna和mlflow (Using Optuna and mlflow)

With our feature matrix, target vector and preprocessing pipeline ready to go, we can now tune a Random Forest classifier to predict heart disease. Note for the purpose of this demonstration I am going to forgo the use of a hold-out test set. To do the hyper-parameter optimization (model development) we will use Optuna and for experiment tracking one of its newer features: mlflow integration (see: mlflow callback in Optuna and mlflow tracking).

利用我们的特征矩阵,目标向量 并准备好进行预处理,我们现在可以调整“随机森林”分类器来预测心脏病。 请注意,出于演示目的,我将放弃使用保持测试集。 为了进行超参数优化(模型开发),我们将使用Optuna并进行实验跟踪,以实现其较新的功能之一 :mlflow集成(请参阅: Optuna中的mlflow回调和mlflow跟踪 )。

First, we begin by defining the objective function to optimize with Optuna (Figure 1), which has three main components:

首先,我们首先定义目标函数以使用Optuna进行优化( 图1 ),它具有三个主要组件:

  1. Defining the space of hyper-parameters and values to optimize: in our case we focus on six Random Forest hyper-parameters (n_estimators, max_depth, max_features, bootstrap, min_samples_split, min_samples_split)

    定义要优化的超参数和值的空间 :在本例中,我们集中于六个随机森林超参数(n_estimators,max_depth,max_features,bootstrap,min_samples_split,min_samples_split)

  2. The Machine Learning pipeline: we have a preprocessing pipeline plus a Random Forest classifier

    机器学习管道 :我们有一个预处理管道以及一个随机森林分类器

  3. The calculation of the metric to optimize: we use the 5-fold CV average ROC AUC

    优化指标的计算 :我们使用5倍CV平均ROC AUC

Figure 1. The Optuna objective function图1. Optuna目标函数

Next, we define a callback to mlflow, one of the new (and experimental!) features in Optuna 2.0 in order to track our classifier hyper-parameter tuning (Figure 2).

接下来,我们定义对mlflow的回调,这是Optuna 2.0中的新功能(也是实验性功能!)之一,以便跟踪分类器的超参数调整( 图2 )。

Figure 2. Setting the mlflow callback to track an Optuna study图2.设置mlflow回调以跟踪Optuna研究

Then we instantiate the Optuna study object to maximize our chosen metric (ROC AUC) (Figure 3). We also apply Hyperband pruning, which helps find optimums in shorter times by stopping unpromising trials early. Note that this is typically of more benefit for more intensive and difficult optimization such as in deep learning.

然后,我们实例化Optuna研究对象以最大化我们选择的指标(ROC AUC)( 图3 )。 我们还应用了Hyperband修剪 ,可通过尽早停止毫无希望的试验来帮助您在更短的时间内找到最佳选择。 请注意,这通常对于深度学习等更深入,更困难的优化更有利。

Figure 3. Creating an Optuna study图3 。 创建一个Optuna研究

Finally, we run the hyper-parameter tuning using 200 trials (Figure 4). It may take a couple of minutes to run.

最后,我们使用200次试验运行超参数调整( 图4 )。 运行可能需要几分钟。

Figure 4. Running the hyper-parameter optimization using Optuna图4.使用Optuna运行超参数优化

The mlflow logged experiment including assessed hyper-parameter configurations for the Random Forest classifier (Optuna study/trials), are stored in a folder called mlruns. To view these results using the mlflow user interface, do the following:

mlflow记录的实验(包括为随机森林分类器评估的超参数配置(Optuna研究/试验))存储在名为mlruns的文件夹中。 要使用mlflow用户界面查看这些结果,请执行以下操作:

  1. Open a shell (for example a Windows PowerShell) in the directory containing the mlruns folder

    在包含mlruns文件夹的目录中打开外壳程序(例如Windows PowerShell)
  2. Activate the virtual environment used for this notebook, i.e., conda activate optuna_env

    激活用于此笔记本的虚拟环境,即conda activate optuna_env

  3. Run mlflow ui

    运行mlflow ui

  4. Navigate to the localhost address provided, something like: http://kubernetes.docker.internal:5000/

    导航到提供的localhost地址,例如: http://kubernetes.docker.internal:5000/

You should see Figure 5, and you can sift through the experiment trials. I deselected the user, source and version columns, as well as the tags section to simplify the view. I also sorted the results by ROC AUC. The top hyper-parameter configurations provided a ROC AUC of 0.917, where max_depth was in the range 14 to 16, max_features was 4, min_samples_leaf was 0.1, min_samples_split was 0.2, and n_estimators was 340 (note these results may differ slightly for you if you re-run the notebook).

您应该看到图5 ,然后可以筛选实验。 我取消选择了用户,源和版本列以及标签部分,以简化视图。 我还按ROC AUC对结果进行了排序。 顶级超参数配置的ROC AUC为0.917,其中max_depth在14到16之间,max_features是4,min_samples_leaf是0.1,min_samples_split是0.2,n_estimators是340(请注意,如果您使用重新运行笔记本)。

Image for post
Figure 5. mlflow summary for Optuna HPO of our heart disease random Forest classifier图5.我们的心脏病随机森林分类器的Optuna HPO的mlflow摘要

Optuna also has great visualizations for summarizing experiments. Here we look at hyper-parameter importance and the optimization history (Figure 6). We can see that the min_samples_leaf is the most important hyper-parameter to tune in this example. The hyper-parameter importance is calculated using a functional ANOVA approach. For more information see Hutter, Hoos and Leyton-Brown 2014.

Optuna还具有用于汇总实验的出色可视化效果。 在这里,我们看一下超参数的重要性和优化历史( 图6 )。 我们可以看到,在此示例中,min_samples_leaf是最重要的超参数。 使用功能方差分析方法计算超参数重要性。 有关更多信息,请参阅Hutter,Hoos和Leyton-Brown 2014 。

Image for post
Figure 6. Hyper-parameter importance (left) and the optimization history for ROC AUC (right)图6.超参数重要性(左)和ROC AUC的优化历史(右)

摘要 (Summary)

Optuna has come a long way since its inception and version 2.0 released in July this year has some fantastic additions, one of which we touched upon in this short article: the mlflow callback. Perhaps as expected the tuning worked great and the summaries available via the in-built visualizations in Optuna and using the mlflow UI made this a lot of fun.

Optuna自问世以来已经走了很长一段路,并且在今年7月发布的2.0版中添加了一些很棒的功能,我们在这篇短文中谈到了其中之一:mlflow回调。 也许正如预期的那样,调整效果很好,并且通过Optuna的内置可视化工具以及使用mlflow UI的摘要提供了很多乐趣。

The jupyter notebook, virtual environment and data used for this article are available at my GitHub. As always comments, thoughts, feedback and discussion are very welcome.

我的GitHub上提供了本文使用的jupyter笔记本,虚拟环境和数据。 与往常一样,我们非常欢迎评论,想法,反馈和讨论。

翻译自: https://medium.com/@jasonpben/heart-disease-classifier-tuning-using-optuna-and-mlflow-fc1366eefdec

糖药病数据集分类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android MVP 框架

为什么80%的码农都做不了架构师?>>> 前言 根据网络上的MVP套路写了一个辣鸡MVP DEMO 用到的 android studio MVPHelper插件,方便自动生成框架代码rxjavaretrofit什么是MVP MVP就是英文的Model View Presenter,然而实际分包并不是只有这三个包…

相似图像搜索的哈希算法思想及实现(差值哈希算法和均值哈希算法)

图像相似度比较哈希算法: 什么是哈希(Hash)? • 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小 的数字“指纹”的方法。散列函数把消息或数…

腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以“焕启”为主题的腾讯“云未来”峰会在广州召开,广东省各级政府机构领导、海内外业内学术专家、行业大咖及技术大牛等在现场共议云计算与数字化产业创…

Toast源码深度分析

目录介绍 1.最简单的创建方法 1.1 Toast构造方法1.2 最简单的创建1.3 简单改造避免重复创建1.4 为何会出现内存泄漏1.5 吐司是系统级别的 2.源码分析 2.1 Toast(Context context)构造方法源码分析2.2 show()方法源码分析2.3 mParams.token windowToken是干什么用的2.4 schedul…

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解决办法

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, 原则来说,没啥影响,还是能运行,但是看着难受 解决办法: 点击蓝色的链接: 进入 …

mongdb 群集_群集文档的文本摘要

mongdb 群集This is a part 2 of the series analyzing healthcare chart notes using Natural Language Processing (NLP)这是使用自然语言处理(NLP)分析医疗保健图表笔记的系列文章的第2部分。 In the first part, we talked about cleaning the text and extracting sectio…

keras框架实现手写数字识别

详细细节可学习从零开始神经网络:keras框架实现数字图像识别详解! 代码实现: [1]将训练数据和检测数据加载到内存中(第一次运行需要下载数据,会比较慢): (mnist是手写数据集) train_images是用于训练系统…

gdal进行遥感影像读写_如何使用遥感影像进行矿物勘探

gdal进行遥感影像读写Meet Jose Manuel Lattus, a geologist from Chile. In the latest Soar Cast, he discusses his work in mineral exploration and environmental studies, and explains how he makes a living by creating valuable information products based on diff…

从零开始神经网络:keras框架实现数字图像识别详解!

接口实现可参考:keras框架实现手写数字识别 思路: 我们的代码要导出三个接口,分别完成以下功能: 初始化initialisation,设置输入层,中间层,和输出层的节点数。训练train:根据训练数据不断的更…

推荐算法的先验算法的连接_数据挖掘专注于先验算法

推荐算法的先验算法的连接So here we are diving into the world of data mining this time, let’s begin with a small but informative definition;因此,这一次我们将进入数据挖掘的世界,让我们从一个小的但内容丰富的定义开始; 什么是数…

Tensorflow入门神经网络代码框架

Tensorflow—基本用法 使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图.使用 tensor 表示数据.通过 变量 (Variable) 维护状态.使用 feed 和 fetch 可以为任意的操作(arbitrary operation)赋值或者从其中获取数据。 • TensorFlow 是一…

手把手教你把代码丢入github 中

手把手教你把代码丢入github 中 作为一个小运维一步步教你们怎么把代码放入到github 中 首先呢我们下载一个git的客户端 https://git-scm.com/downloads/ 下载一个最新版的2.16.2 下载后那就安装吧。如果看不懂英文就选择默认安装的方式吧。但是你得记住你的软件安装的位置 小…

时间序列模式识别_空气质量传感器数据的时间序列模式识别

时间序列模式识别 1. Introduction 2. Exploratory Data Analysis ∘ 2.1 Pattern Changes ∘ 2.2 Correlation Between Features 3. Anomaly Detection and Pattern Recognition ∘ 3.1 Point Anomaly Detection (System Fault) ∘ 3.2 Collective Anomaly Detection (Externa…

oracle 性能优化 07_诊断事件

2019独角兽企业重金招聘Python工程师标准>>> 一、诊断事件 诊断事件无官方技术文档支持,使用存在风险,慎用。使用诊断事件可以获取问题更多的信息,调整系统运行 特性,启用某些内部功能。用于系统故障的诊断。跟踪应…

Tensorflow框架:卷积神经网络实战--Cifar训练集

Cifar-10数据集包含10类共60000张32*32的彩色图片,每类6000张图。包括50000张训练图片和 10000张测试图片 代码分为数据处理部分和卷积网络训练部分: 数据处理部分: #该文件负责读取Cifar-10数据并对其进行数据增强预处理 import os impo…

linux内存初始化初期内存分配器——memblock

2019独角兽企业重金招聘Python工程师标准>>> 1.1.1 memblock 系统初始化的时候buddy系统,slab分配器等并没有被初始化好,当需要执行一些内存管理、内存分配的任务,就引入了一种内存管理器bootmem分配器。 当buddy系统和slab分配器初始化好后&…

Keras框架:Alexnet网络代码实现

网络思想: 1、一张原始图片被resize到(224,224,3); 2、使用步长为4x4,大小为11的卷积核对图像进行卷积,输出的特征层为96层, 输出的shape为(55,55,96); 3、使用步长为2的最大池化层进行池化,此时…

PHP对象传递方式

<?phpheader(content-type:text/html;charsetutf-8);class Person{public $name;public $age;}$p1 new Person;$p1->name 金角大王;$p1->age 400;//这个地方&#xff0c;到底怎样?$p2 $p1;$p2->name 银角大王;echo <pre>;echo p1 name . $p1->n…

微软Azure CDN现已普遍可用

微软宣布Azure CDN一般可用&#xff08;GA&#xff09;&#xff0c;客户现在可以从微软的全球CDN网络提供内容。最新版本是对去年五月份发布的公众预览版的跟进。\\今年5月&#xff0c;微软与Verizon和Akamai一起推出了原生CDN产品。现在推出了GA版本&#xff0c;根据发布博文所…

数据科学生命周期_数据科学项目生命周期第1部分

数据科学生命周期This is series of how to developed data science project.这是如何开发数据科学项目的系列。 This is part 1.这是第1部分。 All the Life-cycle In A Data Science Projects-1. Data Analysis and visualization.2. Feature Engineering.3. Feature Selec…