工具系列:PyCaret介绍_编写和训练自定义机器学习模型

news2024/9/29 7:20:39

文章目录

      • PyCaret
      • 安装PyCaret
      • 👉 让我们开始吧
      • 👉 数据集
      • 👉 数据准备
      • PyCaret中的设置函数
      • 👉 可用模型
      • 👉 模型训练与选择
      • 👉 编写和训练自定义模型
        • 👉 GPLearn模型
        • 👉 NGBoost 模型
        • 👉 编写自定义类

在这里插入图片描述

PyCaret

PyCaret是一个开源的、低代码的机器学习库和端到端模型管理工具,使用Python构建,用于自动化机器学习工作流程。它因其易用性、简单性和快速高效地构建和部署端到端ML原型的能力而广受欢迎。

PyCaret是一个可替代数百行代码的低代码库,只需几行代码即可。这使得实验周期指数级地快速和高效。

PyCaret简单易用。在PyCaret中执行的所有操作都顺序存储在一个管道中,该管道完全自动化用于部署。无论是填充缺失值、独热编码、转换分类数据、特征工程,还是超参数调整,PyCaret都可以自动化完成。

安装PyCaret

安装PyCaret非常容易,只需几分钟即可完成。我们强烈建议使用虚拟环境,以避免与其他库可能发生的冲突。

PyCaret的默认安装是一个精简版的pycaret,只安装硬依赖项在此处列出。

# 安装slim版本(默认)
pip install pycaret

# 安装完整版本
pip install pycaret[full]

当您安装完整版的pycaret时,所有可选依赖项都会被安装,如此处所列。

👉 让我们开始吧

在我们开始讨论自定义模型训练之前,让我们先看一下PyCaret如何使用开箱即用的模型进行快速演示。我将使用PyCaret存储库上可用的“保险”数据集。该数据集的目标是基于某些属性预测患者的费用。

👉 数据集

# 从pycaret仓库中读取数据
from pycaret.datasets import get_data

# 使用get_data函数从pycaret仓库中获取insurance数据集
data = get_data('insurance')

在这里插入图片描述

👉 数据准备

在PyCaret中,对于所有模块来说,设置(setup)是在PyCaret中执行任何机器学习实验的第一个且唯一必需的步骤。这个函数负责在训练模型之前进行所有必要的数据准备工作。除了执行一些基本的默认处理任务外,PyCaret还提供了广泛的预处理功能。要了解PyCaret中的所有预处理功能,请参阅此链接。

# 导入pycaret.regression模块中的所有函数
from pycaret.regression import *

# 初始化设置
# data为数据集,target为目标变量
# s为初始化后的设置,包含了数据预处理、特征工程、模型选择等步骤
s = setup(data, target='charges')

在这里插入图片描述

PyCaret中的设置函数

每当您在PyCaret中初始化设置函数时,它会对数据集进行分析,并推断所有输入特征的数据类型。如果所有数据类型都被正确推断,则可以按Enter键继续。
在这里插入图片描述

👉 可用模型

要查看所有可用于训练的模型列表,您可以使用名为 models 的函数。它会显示一个包含模型ID、名称和实际估计器引用的表格。

# 导入必要的库
import torch
from transformers import AutoModel, AutoTokenizer

# 定义一个函数,用于打印所有可用的模型
def models():
    # 获取所有可用的预训练模型的名称
    model_names = AutoModel.from_pretrained.__self__.CONFIG_PRETRAINED_MODEL_ARCHIVE_LIST
    
    # 打印所有可用的模型名称
    for name in model_names:
        print(name)

# 调用函数,打印所有可用的模型
models()

在这里插入图片描述

👉 模型训练与选择

在PyCaret中,用于训练任何模型的最常用函数是create_model。它接受一个你想要训练的估计器的ID。

# 创建决策树模型
dt = create_model('dt')

在这里插入图片描述

输出显示了10折交叉验证的指标,包括均值和标准差。这个函数的输出是一个训练好的模型对象,本质上是一个scikit-learn对象。

# 打印当前日期和时间
print(dt)

在这里插入图片描述

要在循环中训练多个模型,您可以编写一个简单的列表推导式:

# 创建多个模型

# 创建一个包含多个模型的列表,模型类型分别为'dt'、'lr'和'xgboost'
multiple_models = [create_model(i) for i in ['dt', 'lr', 'xgboost']]

# 检查 multiple_models 的类型和长度
type(multiple_models), len(multiple_models)
>>> (list, 3)

# 打印 multiple_models
print(multiple_models)

在这里插入图片描述

如果你想训练库中所有可用的模型而不是只选择几个,你可以使用PyCaret的compare_models函数,而不是编写自己的循环(尽管结果将是相同的)。

# compare_models()函数是一个用于比较所有模型的函数,它会返回最佳模型。

best_model = compare_models()  # 调用compare_models()函数,并将返回的最佳模型赋值给best_model变量。

在这里插入图片描述

compare_models 函数返回的输出显示了所有模型的交叉验证指标。根据这个输出,Gradient Boosting Regressor 是最佳模型,使用 10 折交叉验证在训练集上的平均绝对误差(MAE)为 2,702。

# 打印最佳模型
print(best_model)

在这里插入图片描述

上面网格中显示的指标是交叉验证分数,用于检查最佳模型在留出集上的分数:

# 预测保留集上的结果
pred_holdout = predict_model(best_model)

在这里插入图片描述

为了在未见过的数据集上生成预测,您可以使用相同的predict_model函数,只需传递一个额外的参数data:

# 创建数据的副本并删除目标列
data2 = data.copy()  # 创建data的副本,命名为data2
data2.drop('charges', axis=1, inplace=True)  # 在data2中删除'charges'列,axis=1表示按列删除

# 生成预测
predictions = predict_model(best_model, data=data2)  # 使用best_model对data2进行预测,将结果保存在predictions中

在这里插入图片描述

👉 编写和训练自定义模型

到目前为止,我们已经看到了如何对PyCaret中所有可用的模型进行训练和模型选择。然而,PyCaret对于自定义模型的工作方式完全相同。只要你的估计器与sklearn API风格兼容,它就会以相同的方式工作。让我们看几个例子。

在我展示如何编写自己的自定义类之前,我将首先演示如何使用自定义的非sklearn模型(即不在sklearn或pycaret的基本库中的模型)。

👉 GPLearn模型

虽然遗传编程(GP)可以用于执行非常广泛的任务,但gplearn被有意地限制为解决符号回归问题。

符号回归是一种机器学习技术,旨在识别最能描述关系的基础数学表达式。它首先通过构建一组天真的随机公式来表示已知独立变量和它们的依赖变量目标之间的关系,以预测新数据。然后,每一代程序都是从前一代中选择适应度最高的个体经过遗传操作进化而来的。

要使用gplearn中的模型,您首先需要安装它:

# 导入所需的库
import numpy as np
from gplearn.genetic import SymbolicRegressor

# 创建一个简单的数据集
X_train = np.arange(0, 10, 0.1).reshape(-1, 1)
y_train = np.sin(X_train).ravel()

# 创建一个符号回归器对象
est_gp = SymbolicRegressor(population_size=500, generations=20, stopping_criteria=0.01,
                           p_crossover=0.7, p_subtree_mutation=0.1, p_hoist_mutation=0.05,
                           p_point_mutation=0.1, max_samples=0.9, verbose=1,
                           parsimony_coefficient=0.01, random_state=0)

# 使用训练数据拟合符号回归器
est_gp.fit(X_train, y_train)

# 打印符号回归器的最佳表达式
print(est_gp._program)

现在你可以简单地导入未训练的模型并将其传递给create_model函数:

# 入未经训练的估计器
from gplearn.genetic import SymbolicRegressor
# 创建一个SymbolicRegressor对象,作为未经训练的估计器
sc = SymbolicRegressor()

# 使用create_model函数对sc进行训练
sc_trained = create_model(sc)

在这里插入图片描述

## 打印已经训练好的sc_trained变量的值

在这里插入图片描述

您还可以检查此模型的保留分数:

## 检查留存数据的得分
pred_holdout_sc = predict_model(sc_trained)

在这里插入图片描述

👉 NGBoost 模型

ngboost 是一个实现了自然梯度提升的 Python 库,如 “NGBoost: Natural Gradient Boosting for Probabilistic Prediction” 中所述。它构建在 Scikit-Learn 之上,旨在在选择适当的评分规则、分布和基学习器方面具有可扩展性和模块化性。关于 NGBoost 方法学的教学介绍可在此 幻灯片 中找到。

要使用 ngboost 中的模型,您首先需要安装 ngboost:

# 导入所需的库
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from ngboost import NGBRegressor
from ngboost.distns import Normal

# 生成回归数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=0)

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 创建NGBRegressor模型
ngb = NGBRegressor(Dist=Normal)

# 训练模型
ngb.fit(X_train, y_train)

# 使用训练好的模型进行预测
y_pred = ngb.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)

# 打印均方误差
print("均方误差:", mse)

代码解释:

  1. 导入所需的库:导入numpy库用于数值计算,导入make_regression函数用于生成回归数据集,导入train_test_split函数用于划分数据集,导入mean_squared_error函数用于计算均方误差,导入NGBRegressor类和Normal类用于创建和训练NGBRegressor模型。
  2. 生成回归数据集:使用make_regression函数生成包含100个样本和1个特征的回归数据集,噪声为0.1,随机种子为0。
  3. 将数据集划分为训练集和测试集:使用train_test_split函数将生成的数据集划分为训练集和测试集,测试集占总样本的20%,随机种子为0。
  4. 创建NGBRegressor模型:使用NGBRegressor类创建一个NGBRegressor模型,指定分布类型为Normal。
  5. 训练模型:使用fit方法训练NGBRegressor模型,传入训练集的特征和标签。
  6. 使用训练好的模型进行预测:使用predict方法对测试集的特征进行预测,得到预测结果。
  7. 计算均方误差:使用mean_squared_error函数计算预测结果与测试集标签之间的均方误差。
  8. 打印均方误差:将计算得到的均方误差打印出来。

一旦安装完成,您可以从ngboost库中导入未经训练的估计器,并使用create_model来训练和评估模型:

 # 导入未经训练的估计器
from ngboost import NGBRegressor
ng = NGBRegressor()

# 使用create_model进行训练
ng_trained = create_model(ng)

在这里插入图片描述

# 打印ng_trained
print(ng_trained)

在这里插入图片描述

👉 编写自定义类

上述的两个例子gplearn和ngboost是pycaret的自定义模型,因为它们在默认库中不可用,但您可以像使用其他开箱即用的模型一样使用它们。然而,可能会有一种情况需要编写自己的算法(即算法背后的数学),在这种情况下,您可以继承sklearn的基类并编写自己的数学。

让我们创建一个天真的估计器,在拟合阶段学习目标变量的平均值,并对所有新数据点预测相同的平均值,而不考虑X输入(在现实生活中可能没有用,但只是为了演示功能)。

# 创建自定义的估计器

import numpy as np
from sklearn.base import BaseEstimator

class MyOwnModel(BaseEstimator):
    
    def __init__(self):
        self.mean = 0  # 初始化均值为0
        
    def fit(self, X, y):
        self.mean = y.mean()  # 计算目标变量y的均值
        return self
    
    def predict(self, X):
        return np.array(X.shape[0]*[self.mean])  # 返回一个长度为X的样本数量的数组,每个元素都是均值

现在让我们使用这个估计器进行训练:

# 创建一个名为mom的MyOwnModel类的实例对象

mom = MyOwnModel()

# 使用create_model函数对mom进行训练,并将训练后的模型保存在mom_trained中

mom_trained = create_model(mom)

在这里插入图片描述

# 生成数据的预测结果

# 使用训练好的mom_trained模型对数据进行预测

# predict_model函数用于生成数据的预测结果,接受两个参数:模型mom_trained和数据data

predictions = predict_model(mom_trained, data=data)

在这里插入图片描述

请注意,标签列(即预测结果)对于所有行来说都是相同的数字$13,225,这是因为我们以这样的方式创建了这个算法,它从训练集的均值中学习并预测相同的值(只是为了保持简单)。

我希望您能欣赏PyCaret的易用性和简单性。只需几行代码,您就可以进行端到端的机器学习实验,并编写自己的算法,而无需调整任何原生代码。

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

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

相关文章

半导体晶圆制造SAP:助力推动新时代科技创新

随着科技的迅猛发展,半导体行业成为了推动各行各业进步的重要力量。而半导体晶圆制造作为半导体产业链的核心环节,其效率和质量的提升对于整个行业的发展起着决定性的作用。在这个高度竞争的行业中,如何提升制造过程的效率、降低成本&#xf…

Bellman_Ford算法总结

知识概览 Bellman_Ford算法适合解决存在负权边的最短路问题,时间复杂度为O(nm)。在存在负权边的最短路问题中,Bellman_Ford算法的效率虽然不如SPFA算法,但是Bellman_Ford算法能解决SPFA算法不能解决的经过不超过k条边的最短路问题。 例题展示…

RPN网络在图像处理中的应用

RPN(Region Proposal Network,区域建议网络)是深度学习中用于目标检测的关键组件之一,它通常与后续的目标检测网络(如Fast R-CNN、Faster R-CNN等)结合使用。RPN的主要作用是生成候选目标区域,从…

OpenGL 绘制Mesh数据(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 Mesh数据的结构主要就是点与三角面片,因此本质上仍然是对三角面片进行绘制。这里我们借助VCG这个库实现对Mesh数据的读取,这个库相对简单轻巧,很方便使用。 二、实现代码 由于修改的部分很多,我们逐一进行解释一下: --…

快速入门学习定时任务框架-xxljob

定时任务框架-xxljob 简介 主要用于分布式任务调度,可以将任务调度和执行分布在多个节点上。它提供了一个集中式的管理平台,支持动态添加、修改、删除任务,以及任务的分片执行,确保任务在分布式环境中的高可用性的一个框架 spr…

【刷题篇】动态规划(八)

文章目录 1、最长定差子序列2、 最长的斐波那契子序列的长度3、最长等差数列4、等差数列划分 II - 子序列5、回文子串6、最长回文子串 1、最长定差子序列 给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序…

Python爬虫中文乱码处理实例代码解析

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python爬虫中文乱码处理实例代码解析。全文2800字,阅读大约8分钟 在进行网络数据抓取时,常常会遇到中文乱码的问题,这可能导致数据无法正…

编程规范:长函数的思考

在工作,我们应该都不想看到非常的长函数。对于一个运行5年左右的项目,极有可能出现这种情况。由于长函数的长、if/else嵌套,导致代码的可读性非常差,这对于项目的维护和开发带来了极大的困难。所以我们应该避免写长函数&#xff0…

基于稀疏表示的小波变换多光谱图像融合算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 小波变换融合 PCA融合 基于稀疏表示的小波变换多光谱图像融合算法 性能指标对比 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........…

Redis相关的那些事(一)

背景 目前工作所负责的工作主要是投放业务,属于读高并发场景,记录一下之前碰到的redis相关的问题。 热点大值Key&缓存击穿问题 问题表现 在某次流量峰值过程中,redis的CPU突然飙升,从监控看起来就是CPU飙升到一定程度&…

微信小程序(uniapp)api讲解

Uniapp是一个基于Vue.js的跨平台开发框架,可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解: Vue.js的API Uniapp采用了Vue.js框架,因此可以直接使用Vue.js的API。例如:v-show、v-if、v-for、comput…

基于HC-SR04传感器的避障机器人设计与实现

本文介绍了如何设计和实现一个基于HC-SR04超声波传感器的避障机器人。我们将详细讨论硬件和电路连接,并提供完整的Arduino代码。该机器人可以利用超声波传感器检测周围的障碍物,并采取相应的动作进行避障,实现自主导航。 引言: 避…

微服务架构<2>

在电商项目中,我们针对一些核心业务,比较复杂的业务需要做一些设计以及优化的过程首先我们针对于订单的模块拆分了2个子模块1.order-curr实时下单业务 2.order-his 做一些历史的订单归档我们的订单业务 >商品添加至购物车 >购物车结算--> 订单…

sklearn 逻辑回归Demo

逻辑回归案例 假设表示 基于上述情况,要使分类器的输出在[0,1]之间,可以采用假设表示的方法。 设 h θ ( x ) g ( θ T x ) h_θ (x)g(θ^T x) hθ​(x)g(θTx), 其中 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​…

Go语言中的`sync`包同步原语

通过sync包掌握Go语言的并发 并发是现代软件开发的基本方面,而Go(也称为Golang)为并发编程提供了一套强大的工具。在Go中用于管理并发的基本包之一是sync包。在本文中,我们将概述sync包,并深入探讨其最关键的同步原语…

第二十一章博客

计算机应用实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。编写网络应用程序前,首先必须明确所要使用的网络协议…

1 手写第一个Win32窗口程序

1 基础概念 什么是窗口? 答:窗口就是屏幕上的一片区域,接受用户的输入,显示程序的输出。可以包含标题栏、菜单栏、工具栏以及控件等。什么是句柄? 答: 作为一种管理和操作系统资源的机制,提供了…

【AI提示词故事】雪的诗意:静谧与活力的奇妙交织

雪的诗意:沉浸在雪景的浪漫氛围中 冬日的清晨,窗外的世界被一层洁白的雪覆盖着,仿佛是大自然为我们准备的一幅美丽画卷。 我走出房门,踏上雪地, 那柔软的雪粒在脚下发出轻柔的咯吱声,仿佛是在诉说着冬日的…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

Kubernetes(K8S)快速入门

概述 在本门课程中,我们将会学习K8S一些非常重要和核心概念,已经操作这些核心概念对应组件的相关命令和方式。比如Deploy部署,Pod容器,调度器,Service服务,Node集群节点,Helm包管理器等等。 在…