ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用PyCaret构建机器学习模型

使用PyCaret构建机器学习模型

作者| ARORA

编译|VK

来源|

概述介绍

当我建立起我的第一个机器学习模型的时候, 那个代码块显得相当麻烦。我到现在还记得很清楚。当时我在搭建一个集成模型。这个任务需要用到非常许多行的代码量。那种状况下, 真的十分需要一个向导来帮忙。目的就是为了把那些混乱的代码给解开。

当提到去搞那个叫做可解释的机器学习模型的东西的时候, 特别是在说这个行业里面的情况之下, 写起代码来要是高效的话, 那就是成功的关键所在。因此, 我这边是强烈地去建议, 去用库。

我希望, 在我的刚刚进入机器学习学习阶段的那些日子里, 这个库就会出现。它是一个非常灵活运用并且十分有用的软件包, 我在最近的这几个月时间里, 已经变得相当依赖于它了。

我坚定地认为, 任何一个有着志愿去成为数据科学方向专业的人士或者是数据分析方向专业的人士的人, 他们都会从使用这个库的过程中获取到非常明显的益处。

我们会先看一看到底是什么东西, 这里面包括怎么在你的那台机器上面去安装它, 接下来, 咱们就开始深入下去研究怎么用这个工具来搭建可以让人看得明白的机器学习模型, 这里头当然也包括了那些集成起来的模型。

目录

那么究竟存在着什么东西? 然后, 人们去使用这个东西的原因到底是什么?

安装

熟悉

使用训练我们的机器学习模型

我们要开始使用, 并且去构建一个集成的模型。

分析模型

做出预测

保存并加载模型

那么究竟存在着什么东西? 然后, 人们去使用这个东西的原因到底是什么?

它属于中开源的机器学习这一类库, 它能够帮你完成从数据准备到模型部署这样的过程, 因为它很容易使用, 所以你可以用一行代码来完成几乎所有的数据科学项目任务。

我察觉到了这一点, 那就是它的方便程度是非常高。下面我将会给出两个主要的原因来解释为什么会这么觉得。

安装

这是最为直接的一种做法, 能够立即使用通过pip工具进行安装操作的第一个正式发布的稳定版本, 也就是版本号标记为v1.0.0的那个版本, 只要你在相关的操作界面里执行下面提供的那一条指令, 就可以马上开始行动了。

!pip3 install pycaret

先把这个问题的陈述好好熟悉一下, 然后再去看那个数据集。

在这篇文章里面, 我们会去处理一个分类的任务。现在大家手里头有一个银行方面的数据集, 这里面包含了客户的具体年龄、还有工作经验多少、收入多少、教育水平是怎么样的, 同时也有他有没有信用卡这样的信息。

这家银行呢, 是想建立一个机器学习方面的模型, 来帮助自己去识别出来哪些潜在客户在购买个人贷款这一件事情上面的可能性会更高一些。

这份数据集, 它的总行数一共有5000行那么多, 我们对这一整个数据集进行了划分处理, 其中, 有4000行的数据被选择出来并保留下来, 专门用于训练模型这一过程, 而剩下的那1000行数据, 则是被留作测试模型之用, 至于本文中所包含的完整代码, 以及所使用的全部数据集, 都可以直接在当前位置找到相关信息。

咱们先从用库来读取数据集这块儿动手开始做起吧。

# 导入panda以读取CSV文件

import pandas as pd

# 读取数据

data_classification = pd.read_csv('datasets/loan_train_data.csv')

# 查看数据的顶行

data_classification.head()

当你在开始一个机器学习项目之前, 头一件要做的要紧事就是去把运行环境给搭建好。这其实就是一个分两步走的一个简单流程。

导入模块的这一步, 根据所要解决的具体问题类型来决定。在它自己的第一个版本里面, 总共能够供用户使用的不同模块一共有6个,这6个模块分别是: 回归、分类、聚类、自然语言处理(NLP)、异常检测以及关联挖掘规则。

在本文的内容里, 我们将去解决一个分类类型的问题, 所以我们会导入那个用来进行分类的模块并且做出初始化的设定, 在这一个步骤当中,我们会去做一些比较基础的预处理的工作, 这些工作包括忽略id和Date这两个列、填充那些缺失的值、对分类类型的变量进行编码操作, 以及要把数据集拆分成为训练数据和测试数据这两部分, 以便于在接下来的所有建模的步骤里面使用。

当你运行setup这个函数的时候, 它会首先对数据的类型进行确认, 然后如果你点击键盘上的Enter键的话, 它就会接着把环境给创建出来。

# 导入分类模块

from pycaret import classification

# 设置环境

classification_setup = classification.setup(data= data_classification, target='Personal Loan')

我们都准备好探索了!

使用训练我们的机器学习模型训练模型

通过训练的方式去构建一个模型其实是非常简单的事情。你仅仅需要去调用那个函数就可以了。这个函数的特点在于它所接收的参数其实只有一个。在这个参数中, 代表模型的那个内容会被缩写为一个字符串形式存在。

在这个地方, 我们是要先把一个决策树模型给训练出来, 这一步得通过这个叫作“dt”的东西去执行, 然后它会给你返回一张表格, 表里面装着的, 就是那些用在分类模型上面的、常见的用来做评估的那些指标的, 经过k倍交叉验证以后得到的分数。

这里提到的, 是用来对于学习的过程进行监督并且进行评估的一系列指标的具体内容。

你可以查看相关的文档页面来获取更多的缩写信息说明, 通过这些内容能够了解有关该领域的更多内容细节。

# 建立决策树模型

classification_dt = classification.create_model('dt')

同样的, 为了训练模型, 只需把字符串""传递过去。

# 构建xgboost模型

classification_xgb = classification.create_model('xgboost')

超参数调整

通过使用一个函数, 我们来对机器学习模型的超参数作出调整, 这个模型缩写字符串作为传入给这个函数的一个参数, 跟我们在函数里面用的那个是一样的。

这在我们这里给了非常多的灵活空间, 打个比方来解释一下就是, 我们能够去利用在函数里面存在的那个叫做fold的参数来把折叠的次数给它定义清楚, 又或者我们是可以换一种做法的, 就是直接用参数去把这个迭代的次数给改了, 要是说我们把nòiter这个参数的值提上去的话, 就会直接导致训练所花费的时间大幅度增加, 不过这样的话也能换来性能上的那种变好。

咱们这边呢, 得去把一个模型给训练好。

# 构建和调优catboost模型

tune_catboost = classification.tune_model('catboost')

我们要开始使用, 并且去构建一个集成的模型。

把机器学习里的集成模型, 它就是把好多不同模型的决策结果拿过来进行结合, 这样做呢, 就是为了能够提高整体上的那种表现情况。

在中, 我们可以用一行代码创建、和集成模型。

我们打算在此处对集成模型实施训练操作, 且这一过程同时会输出一份数据表格, 该表格里面罗列了各项被广泛使用的评估指标在k折交叉验证阶段所得到的具体分数。

# boosting

boosting = classification.ensemble_model(classification_dt, method= 'Boosting')

在另一个方面还存在一项极为著名且具有重大影响力的合成技术方法。你仅仅所需要做的操作, 就是去传递那个模型。而这个模型是在函数列表中预先创建好的。

# blending

blender = classification.blend_models(estimator_list=[classification_dt, classification_xgb])

事情就是这样呀, 其实你只需要去编写那个一行代码, 然后绝大部分的那些工作都是可以被搞定的。

比较模型

这算是这个库里面的另外一项比较实用的功能。如果我们并不想挨个去尝试各式各样的模型, 那么就可以直接调用那个函数, 让它自动帮我们把所有已经有的模型都进行一次训练操作, 然后还会拿那些普遍使用的评估指标做一番对比分析。

这个函数只能够在当前目录里面, 以及以那个点加名字作为前缀模块里面进行找到。

# 比较不同分类模型的性能

classification.compare_models()

分析模型

现在, 在训练模型之后, 下一步就是分析结果, 这从商业角度来看, 可以说是特别有用, 对吧?分析时使用的模型其实也很简单, 你只需要用一行代码, 就完全可以执行以下这些操作:

对模型的结果进行绘图操作, 其实分析里面的模型性能这件事, 和写代码一样简单。用户可以绘制决策边界图、精确召回曲线图、验证曲线图以及残差图等类型的图表。另外针对群集模型的话, 可以绘制肘部图和轮廓图。还有对于文本数据来说, 能够绘制字云图、图结构图以及频率图等等。

解释这些结果的意思呢, 是通过分析那些重要的特征来帮助解释模型的最终产出情况, 这样做有助于调试机器学模型本身的功能表现。这一步骤属于工业级别的机器学习项目流程里面非常至关重要的一部分工作。

在进行模型解释的时候, 我们可以利用一行简单的代码操作, 通过SHAP值以及相关图的组合方式来对模型所产生的那些结果进行绘图展示。

大家可以通过把模型对象当成参数来提交, 还要把需要使用的打印类型给指定掉, 这样就能进行模型结果的打印操作了。接下来, 我们要对AUC-ROC曲线来进行绘制, 同时呢, 还得去把决策边界也给画出来。

# AUC-ROC 图

classification.plot_model(classification_dt, plot = 'auc')

# 决策边界

classification.plot_model(classification_dt, plot = 'boundary')

需要对训练模型的情况进行检查, 绘制出那个用于展示精确度和召回率之间关系的曲线图, 同时也要画出验证曲线来参考。

# Precision Recall 曲线

classification.plot_model(classification_dt, plot = 'pr')

# 验证曲线

classification.plot_model(classification_dt, plot = 'vc')

我们要把我们的模型拿出来进行一个评估。

如果你是不想单独去绘制所有这些可视化效果的话, 那么这个库里面还有另外一个非常惊人的功能。就是在这个函数之中, 你只是需要把这个模型对象传递进去, 那么它就会创建一个交互式的窗口, 然后供你用所有可能的各种方式去查看和分析这个模型的。

# 评估模型

classification.evaluate_model(classification_dt)

现在我们来解释一下我们所提出的这个模型。

在大多数机器学习项目里面, 解释复杂模型这个事儿是非常重要的。它通过分析模型认为哪些东西比较重要, 来帮我们对模型进行调试。在提到的这个环节里, 做这一步其实跟编写用于解释模型的代码以便获取相关值是一样简单的事情。

# 解释模型:SHAP

classification.interpret_model(classification_xgb)

让我们试着去画一下, 那个相关的图。

# 解释模型:相关性

classification.interpret_model(classification_xgb,plot='correlation')

做出预测

最后一步, 我们需要对那些目前还看不到的数据进行一个预测的操作。为了实现这个操作, 我们只需要把我们之前准备好的、用来做 的模型以及那个数据集传递进去就可以了。这里要特别注意一下, 一定要确保传入的数据集的格式, 和我们之前设置开发环境的时候所规定的那个格式保持完全一致才行。

构建一个包含了从开始到结束所有必要步骤的处理流程, 然后把那些在前面学习阶段没有见过的新数据放进入这个流程里, 最后让系统输出处理后的结果。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进