代码实现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,一经查实,立即删除!

相关文章

java坐标移动题目case_用java怎样编写一个二维坐标平移程序

展开全部java编写二维坐标平移程序,主要是e69da5e887aa62616964757a686964616f31333337626231通过类继承Point2D,使用里面的方法来平移,如下代码:class Point2D{int x, y;Point2D(){ }Point2D(int i,int j){xi;yj;}void offset(int a, int …

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

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

java的数列极差_[hoj]数列极差问题 | 学步园

贪心。关键是证明子问题最优即是总问题最优。可以考虑三个数的情况&#xff0c;易证选取最小的数擦除将得到最大数&#xff0c;vice versa 。故总体也是如此。用优先队列实现。STL自带仿函数greater<>用于调整小顶堆。#include #include using namespace std;int main(){…

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

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

java容易掉发吗_容易被忽略的面试题—Java高并发

常见实现如CAS等。部分乐观锁削弱了一致性&#xff0c;但中低并发程度下的效率大大提高。并发编程Java中如何创建一个线程&#xff1f;从面相接口的角度上讲&#xff0c;实际上只有一种方法实现Runable接口&#xff1b;但Thread类为线程操作提供了更多的支持&#xff0c;所以通…

java spring mvc api_SpringMVC实现REST API

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

java 定义构造器_java的构造器定义以及使用

构造器&#xff0c;是面向对象所特有的概念&#xff0c;是一种特殊的方法&#xff0c;与对象创建有关1、构造器没有返回值类型2、构造器方法名与类名相同&#xff0c;而且可以重载构造器3、构造器不能手动调用&#xff0c;只能在创建对象时自动调用一次4、如果没有在类中定义构…

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

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

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如何判断一个文件是否处于打开状态?

请问你的是linux吗&#xff1f;如果是linux可以借助/proc来获取。 import os class File(object): def __init__(self, file_path): if not os.path.exists(file_path): raise OSError({file_path} not exist.format(file_path file_path)) self.file_path os.path.abspath(f…

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 定时器每天就执行一次的实现代码

1.实现功能编写python脚本一直运行&#xff0c;判断当下是否是新的一天&#xff0c;如果是就执行一次任务代码2.具体实现代码#-*-coding:utf-8 -*-__author__ Administratorimport os,threading,timecurTimetime.strftime("%Y-%M-%D",time.localtime())#记录当前时间…

python 类的内置方法_【转】[python] 类常用的内置方法

原文&#xff1a;http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ 内置方法 说明 __init__(self,...) 初始化对象&#xff0c;在创建新对象时调用 __del__(self) 释放对象&#xff0c;在对象被删除之前调用 __new__(cls,*args,**kwd) 实例的生成操作 _…

java 文件与base64_java之文件与base64字符之间的相互转换

package cn.xuanyuan.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class FileUitl {/*** 将文件转成base64 字符串* param path文件路径* return ** thro…

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

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

java 父子线程 调用链_ZipKin原理学习--Zipkin多线程及线程池中追踪一致性问题解决...

在学习Zipkin分布式追踪系统中我们了解到Trace在整个调用链是一致的&#xff0c;在web服务中可以通过在header设置Trace值在不同的服务中进行传递&#xff0c;那样在一个服务内部不同的线程&#xff0c;甚至是线程池中Zipkin是如何处理的&#xff0c;接下来我们来了解学习一下。…

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

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

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

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