代码实现tan graph model for classification_几行代码搞定ML模型,低代码机器学习Python库正式开源...

99c34e3686869804aaa0bbb4ccddef2e.png
PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率。

1a97f73b4c8eb47d491feef61e8f4370.png

想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的选择。

最近,机器之心发现了一个开源低代码机器学习 Python 库 PyCaret,它支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型。

  • GitHub 地址:https://github.com/pycaret/pycaret
  • 用户文档:https://www.pycaret.org/guide
  • Notebook 教程:https://www.pycaret.org/tutorial

PyCaret 库支持数据科学家快速高效地执行端到端实验,与其他开源机器学习库相比,PyCaret 库只需几行代码即可执行复杂的机器学习任务。该库适合有经验的数据科学家、倾向于低代码机器学习解决方案的公民数据科学家,以及编程背景较弱甚至没有的新手。

PyCaret 库支持多种 Notebook 环境,包括 Jupyter Notebook、Azure notebook 和 Google Colab。从本质上来看,PyCaret 是一个 Python 封装器,封装了多个机器学习库和框架,如 sci-kit-learn、XGBoost、Microsoft LightGBM、spaCy 等。

机器学习实验中所有步骤均可使用 PyCaret 自动开发的 pipeline 进行复现。在 Pycaret 中所执行的所有操作均按顺序存储在 Pipeline 中,该 Pipeline 针对模型部署进行了完全配置。

不管是填充缺失值、转换类别数据、执行特征工程设计,还是调参,Pycaret 都能够自动执行。而且 pipeline 可以保存为二进制文件格式,支持在不同环境中进行迁移。

PyCaret 包含一系列函数,用户通过它们完成机器学习实验。PyCaret 库的函数可分为以下五个大类,涵盖初始化、模型训练、集成、分析与部署

2f5cc9b3dd73d43d8fbcba75765f2a44.png

此外,PyCaret 提供 6 个模块,支持有监督和无监督模型的训练和部署,分别是分类、回归、聚类、异常检测、自然语言处理和关联规则挖掘。每个模块封装特定的机器学习算法和不同模块均可以使用的函数。用户可以根据实验类型,将模块导入环境中。

0d72ab2f59c2ea8cf2434ca6a5d65eaa.png
PyCaret 库提供的六个模块。

接下来,我们就来了解一下 PyCaret 库的安装和使用方法吧。

启动 PyCaret

使用 pip 安装 PyCaret。

使用命令行界面或 notebook 环境,运行下面的代码进行安装:

pip install pycaret

Azure notebook 和 Google Colab 用户,可以运行下列代码进行安装:

!pip install pycaret

安装 PyCaret 时会自动安装所有依赖项,过程非常简单,如下图所示:

29c61ed5f2baeb7b046e6cd0a54165bf.gif

PyCaret 分步教程

数据获取

该教程使用「糖尿病」数据集,目标是根据血压、胰岛素水平以及年龄等多种因素预测患者的预后情况(1 或 0)。数据集参见 PyCaret 的 GitHub 地址。

直接从 PyCaret 库中导入数据集的最简单方法是使用 pycaret.datasets 模块中的 get_data 函数。

from *pycaret.datasets* import *get_data*
diabetes = *get_data*('diabetes')

15a3edc4379d0da90a51717874e358d2.png
get_data 的输出。

PyCaret 可以直接处理 Pandas 数据帧。

环境配置

在 PyCaret 中执行任意机器学习实验的第一步都是,通过导入所需模块并初始化 setup() 来设置环境。如下示例中使用的模块是 pycaret.classification。

模块导入后,将通过定义数据结构「糖尿病」和目标变量「类变量」来初始化 setup()。

from *pycaret.classification* import ***exp1 = *setup*(diabetes, target = 'Class variable')

8113eb00a686bde7cd9064deac2ef646.png

所有预处理的步骤都会应用至 setup() 中,PyCaret 拥有 20 余项功能可运用于 ML 相关的数据准备,例如根据 setup 函数中定义的参数来创建 Transformation pipeline,同时也会自动协调 Pipeline 中所有的相关性及依赖关系。这样面对测试或者未见过的数据集,用户无需再手动管理或是调整执行的顺序。

PyCaret 的 Pipeline 可轻松地在各环境之间相互迁移,比如大规模运行或是轻松部署到生产环境中。下图展示了 PyCaret 首次发布时可用的预处理功能:

d6867a75f0a027951c11cfb0459529bf.png
PyCaret 的预处理功能。

数据预处理是机器学习的必要步骤,比如当初始化 setup() 时,缺失值填充、分类变量编码、标签编码(将 yes or no 转化为 1 or 0)以及 train-test-split 会自动执行。

模型比较

这是监督机器学习实验(分类或回归模块)应该进行的第一步。compare_models 函数训练模型库中的所有模型,并使用 k 折交叉验证(默认 k=10)来比较常见的评估指标。所使用的评估指标如下所示:

  • 分类模块:准确度、AUC、Recall、精度、F1 和 Kappa;
  • 回归模块:MAE、MSE、RMSE、R2、RMSLE 和 MAPE。
*compare_models*()

d2bd397cf2b0f2935e53fb94092523a0.png
compare_models() 函数的输出。Output from compare_models( ) function

默认使用 10 折交叉验证来评估指标,可以通过改变 fold 参数值来改变评估结果。默认使用精度值(由高到低)来分类 table,同样可以通过改变 sort 参数值来改变分类结果。

模型创建

在 PyCaret 的任何模块中,创建模型就像编写 create_model 一样简单,它只需要一个参数,即作为字符串输入来传递的模型名称。此函数返回具有 k 折交叉验证分数和训练好的模型对象的表格。

adaboost = *create_model*('adaboost')

eefbe36585eb3cc50bed6e3eef7bb887.png

变量「adaboost」存储一个由*create_model*函数返回的训练模型对象,该对象是 scikit 学习估计器。可以通过在变量后使用标点(.)来访问训练对象的原始属性。参见下面的示例:

ec5194556d077a426cf10d41311f0d8c.png
训练好的模型对象的属性。

PyCaret 有 60 多个开源即用型算法。

模型调优

tune_model 函数用于自动调优机器学习模型的超参数。PyCaret 在预定义的搜索空间上使用随机网格搜索。此函数返回具有 k 折交叉验证分数和训练好的模型对象的表格。

tuned_adaboost = tune_model('ada')

47b0fa6174c0b9a225b93b9fa71b8b80.png

在无监督模块中的 tune_model 函数,比如 pycaret.nlp,pycaret.clustering 和 pycaret.anomaly 可以和监督模块结合使用。举例而言,通过评估监督 ML 模型中的目标或者损失函数,PyCaret 的 NLP 模块可以用来调整准确度或 R2 等指标的数值。

模型集成

ensemble_model 函数用于集成训练好的模型。它只需要一个参数,即训练好的模型对象。此函数返回具有 k 折交叉验证分数和训练好的模型对象的表格。

# creating a decision tree model
dt = *create_model*('dt')# ensembling a trained dt model
dt_bagged = *ensemble_model*(dt)

80623544327b0f14b88adfd25daa9e0d.png

该库默认使用 Bagging 方法用于模型集成,用户也可使用 ensemble_model 函数中的 method 参数将其转换为 Boosting。

PyCaret 还提供了 blend_models 和 stack_models 功能,来集成多个训练好的模型。

模型绘制

训练好的机器学习模型的性能评估和诊断可以通过 plot_model 函数来完成,具体而言,将训练模型对象和 plot 类型作为 plot_model 函数中的字符串输入(string input)。

# create a model
adaboost = *create_model*('ada')# AUC plot
*plot_model*(adaboost, plot = 'auc')# Decision Boundary
*plot_model*(adaboost, plot = 'boundary')# Precision Recall Curve
*plot_model*(adaboost, plot = 'pr')# Validation Curve
*plot_model*(adaboost, plot = 'vc')

7810334d6cfdab989d8966493355a251.png

此外,用户还可以使用 evaluate_model 函数在 notebook 的用户界面上看到可视化图。

*evaluate_model*(adaboost)

57f430663690f577456c73e232c5ae84.gif

pycaret.nlp 模块中的 plot_model 函数可用于可视化文本语料库和语义主题模型。

模型解释

数据中的关系呈非线性是实践中常常出现的情况。这时总会看到基于树的模型要比简单的高斯模型的表现好得多。但这是以牺牲可解释性为代价的,因为基于树的模型无法像线性模型那样提供简单的系数。

PyCaret 通过 interpret_model 函数实现了 SHAP(SHapley Additive exPlanations)。

# create a model
xgboost = *create_model*('xgboost')# summary plot
*interpret_model*(xgboost)# correlation plot
*interpret_model*(xgboost, plot = 'correlation')

f962b6be47a1a0aa0add4c2ac2f0da99.png

测试数据集上特定数据点的解释可以通过『reason』图来评估。如下图所示:在测试数据集上检查首个实例。

*interpret_model*(xgboost, plot = 'reason', observation = 0)

d71b3ae9730b5bd8028f23f2bdc0533c.png

模型预测

到目前为止,所看到的结果仅基于训练数据集上 k 折交叉验证(默认 70%)。所以为了得到模型在测试或者 hold-out 数据集上的预测结果和性能,用户可以使用 predict_model 函数。如下所示:

# create a model
rf = *create_model*('rf')# predict test / hold-out dataset
rf_holdout_pred* = predict_model*(rf)

7ff208e6269fad1d010218cb99500837.png

predict_model 函数还可以用来预测未见过的数据集。现在,将训练时所使用的数据集用作新的未见过数据集的代理(proxy)。在实践中,predict_model 函数会被迭代地使用,每次使用都会有一个新的未见过的数据集。

predictions = *predict_model*(rf, data = diabetes)

9f121a27d5011ccbb57b98e6760aa436.png

此外,对于使用 stack_models 和 create_stacknet 函数创建的模型,predict_model 函数可以预测它们的序列链。不仅如此,借助于 deploy_model 函数,predict_model 函数还可以直接基于托管在 AWS S3 上的模型进行预测。

模型部署

我们可以使用以下方法让训练好的模型在未见过的数据集上生成预测:在训练模型的同一个 notebook 或 IDE 中使用 predict_model 函数。但是,在未见过的数据集上执行预测是一个迭代的过程。其中,基于用例的不同,预测可以分为实时预测和批量预测。

PyCaret 的 deploy_model 函数允许部署整个 pipeline,包括云端训练的模型。

*deploy_model*(model = rf, model_name = 'rf_aws', platform = 'aws', authentication =  {'bucket'  : 'pycaret-test'})

模型/实验保存

训练完成后,包含所有预处理转换和训练模型对象在内的整个 pipeline 能够以二进制 pickle 文件的格式保存。

# creating model
adaboost = *create_model*('ada')# saving model*
save_model*(adaboost, model_name = 'ada_for_deployment')

270d6058aedad0c9c01b9294192dd4ab.png

用户也能够以二进制文件的格式保存整个实验,包括所有中间输出(intermediary output)。

*save_experiment*(experiment_name = 'my_first_experiment')

641097c7ad0a6313f54e89bcfaeba1f0.png

最后,通过 PyCaret 所有模块中可用的 load_model 和 load_experiment 函数,用户还可以下载保存的模型和实验。

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

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

相关文章

dataframe 如何选中某列的一行_带你领略pandas中多表之间如何处理

但我们在处理Pandas多表数据时,我们需要将多个表之间进行表格的连接与合并,当连接完多表之后我们可能还需要对数据进行多重的索引,方便我们更快的找到数据,以及对数据进行做透视表,更加直观的去观察我们的数据,今天我们就围绕着数据合并以及数据重塑及透视表进行展开讲解,让我们…

python计算定积分_python编程通过蒙特卡洛法计算定积分详解

这篇文章主要介绍了python编程通过蒙特卡洛法计算定积分详解,具有一定借鉴价值,需要的朋友可以参考下。 想当初,考研的时候要是知道有这么个好东西,计算定积分。。。开玩笑,那时候计算定积分根本没有这么简单的。但这确…

java spring mvc api_SpringMVC实现REST API

JSON使用Jackson jar包、RequestBody、ResponseBody注解,达到:1. 请求JSON消息体映射为JAVA对象2. 返回JAVA对象映射为JSON消息体Step 1. 导入Jackson jar包:Step 2. 在Spring MVC配置中加入annotation-driven,该配置可以确保Requ…

gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了

前言当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问,网关是对客户端的入口与出口&…

json里面的list数据取不出来_sql盲注的困局:利用DNSlog快速导出数据

对于一个sql注入点来说最幸运的就是支持堆叠注入&#xff0c;最蛋疼的就是盲注&#xff0c;盲注里面难搞的就是基于时间的盲注。我们在本地利用这段代码进行演示<?php error_reporting(0); $link mysqli_connect(localhost,root,root); mysqli_set_charset($link,utf8); m…

python怎么测试程序_python如何测试程序

测试函数是用于自动化测试&#xff0c;使用python模块中的unittest中的工具来测试 附上书中摘抄来的代码&#xff1a;#codingutf-8 import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): f…

判定覆盖白盒测试java_白盒测试系列(四)条件判定覆盖

条件判定覆盖一、定义&#xff1a;程序中每个判定至少有一次为真值&#xff0c;有一次为假值,使得程序中每个分支至少执行一次&#xff0c;且使得各判定中的每个条件获得各种可能的取值至少满足一次。二、特点&#xff1a;1、综合了条件覆盖和判定覆盖的特点2、满足条件判定覆盖…

discard python_Netty入门教程(一) 实现DISCARD服务

官方那个给出的介绍是&#xff1a;Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可靠性的网络服务器和客户端程序。然后我们简单理解一下&#xff0c;这玩意就是个程序&#xff0c;干什么的&am…

python向量化编程技巧_神经网络基础之Python与向量化

Vectorization 深度学习算法中&#xff0c;数据量很大&#xff0c;在程序中尽量减少使用loop循环语句&#xff0c;而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用矩阵运算的思想&#xff0c;大大提高运算速度。例如下面所示在Python中使用向量化要比使…

SQL server 数据库面试题及答案(实操2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…

python电子相册制作软件_电子相册怎么做

电子相册制作 本文来自#千兆网络有什么用#征稿活动&#xff0c;不断提速的网络给你的生活带来了什么变化&#xff1f;快来参与活动&#xff0c;聊聊你玩转互联网&#xff0c;高速网上冲浪的经历&#xff01;>点击这里查看活动详情< 现在手机的拍照功能日趋强大&#xff0…

java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)

印象中循环删除list中的元素使用for循环的方式是有问题的&#xff0c;但是可以使用增强的for循环&#xff0c;然后今天在使用时发现报错了&#xff0c;然后去科普了一下&#xff0c;再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。JAVA中循环遍历…

python reduce函数_Python reduce()函数的用法小结

reduce()函数也是Python内置的一个高阶函数。 reduce() 格式&#xff1a; reduce (func, seq[, init()]) reduce()函数即为化简函数&#xff0c;它的执行过程为&#xff1a;每一次迭代&#xff0c;都将上一次的迭代结果&#xff08;注&#xff1a;第一次为init元素&#xff0c;…

Php获取id并提交表单,提交表单后 PHP获取提交内容的实现方法

提交表单后 PHP获取提交内容的实现方法2020-06-14 15:35:24问题&#xff1a;网页上提交表单之后&#xff0c;PHP为什么不能获取提交的内容&#xff1f;然而在老版本的PHP上运行却正常。新版的PHP已经废弃了原来的表单内容处理方式&#xff0c;即不再把提交的表单的内容直接复制…

idea查看一个类的所有子类_java new一个对象的过程中发生了什么

java在new一个对象的时候&#xff0c;会先查看对象所属的类有没有被加载到内存&#xff0c;如果没有的话&#xff0c;就会先通过类的全限定名来加载。加载并初始化类完成后&#xff0c;再进行对象的创建工作。我们先假设是第一次使用该类&#xff0c;这样的话new一个对象就可以…

stringbuilder删除最后一个字符_Java类-StingBuffer,StringBuilder

Java提供了String,StringBuffr,StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法.他们的相同点都是封装字符串;都实现了CharSeqence接口.public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable,CharSequncepublic f…

docker 删除所有镜像_Docker常用命令

&#xfeff;docker 常用命令#查看 Docker 版本 docker version #从 Docker 文件构建 Docker 镜像 docker build -t image-name docker-file-location#运行 Docker 镜像 docker run -d image-name#查看可用的 Docker 镜像 docker images#查看最近的运行容器 docker ps -l#查看所…

php制作学生卡片,PHP基础案例一:展示学生资料卡

一、需求分析&#xff1a;请利用PHP的变量保存学生的姓名、出生日期、所属学科以及学号&#xff0c;最后将该学生的信息输出到网页中显示。其中&#xff0c;在定义学生的出生日期和学号时候&#xff0c;必须满足以下两个条件。1、出生日期为公历&#xff0c;填写格式为YYYY-MM-…

element label动态赋值_基于Element封装可拖动放大缩小的弹窗

ElementUI 自带的对话框组件(el-dialog)没有拖动和最小化的处理&#xff0c;目前业务遇到呼叫弹屏处理&#xff0c;基于el-dialog 再次进行封装下&#xff0c;上篇文章有人说图片换成代码就好了&#xff0c;下面代码部分我就直接放代码了&#xff0c;不再用图片处理了。先看看效…

eeg数据集_运动想象,情绪识别等公开数据集汇总

本文来自脑机接口社区运动影像数据Left/Right Hand MI: http://gigadb.org/dataset/100295Motor Movement/Imagery Dataset: https://www.physionet.org/physiobank/database/eegmmidb/Grasp and Lift EEG Challenge: https://www.kaggle.com/c/grasp-and-lift-eeg-detection/d…