前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵

钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵

原创
作者头像
ShowMeAI
发布于 2022-08-09 14:02:43
发布于 2022-08-09 14:02:43
1K00
代码可运行
举报
文章被收录于专栏:ShowMeAI研究中心ShowMeAI研究中心
运行总次数:0
代码可运行

💡 作者:韩信子@ShowMeAI 📘 数据分析 ◉ 技能提升系列:http://www.showmeai.tech/tutorials/33 📘 AI 面试题库系列:http://www.showmeai.tech/tutorials/48 📘 本文地址:http://www.showmeai.tech/article-detail/302 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容

我们经常会谈到工业界端到端的机器学习建模,所谓端到端,是指的把整个过程构建在一个完整的流程(比如pipeline管道)中,包括数据侧的处理、模型建模调优,及模型部署应用等环节,如我们之前所说,完整的机器学习开发流程如下:

在本篇内容中,ShowMeAI将给大家讲解到下述内容:

  • 使用 PyCaret 构建端到端机器学习管道
  • ML 模型部署 & FastAPI 开发实时预测

💡 工具库

📌 PyCaret

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

更多有关 PyCaret 的信息,可以在官方 📘 GitHub 看。

我们先通过 pip 安装 pycaret 工具库:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
pip install pycaret

📌 FastAPI

FastAPI 是一个快速(高性能)的Web框架,主要特点是:

  • 快速 :非常高的性能,是目前可用的最快的 Python 框架之一 。
  • 快速编码 :将开发速度提高2到3倍。
  • 简单 :易于学习和使用。

更多有关 FastAPI 的信息,请查看官方 📘 GitHub

我们也通过 pip 安装 fastapi:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
pip install fastapi

💡 业务背景

本篇内容中涉及的案例来自达顿商学院(案例研究发表在 📘 哈佛商学院),案例中收集了 6000 颗钻石的数据,包括它们的价格和切工、颜色、形状等属性。

💡 数据

我们在本篇内容中,使用钻石的克拉重量、切工、颜色和其他特征等属性来预测钻石的价格。 数据集可从 📘 此处下载。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 加载数据
from pycaret.datasets import get_data
data = get_data('diamond')

💡 探索性数据分析

我们先做一些快速数据分析和可视化来评估数据字段属性(重量、切工、颜色、净度等)与目标变量/标签Price的关系。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 绘制carat_weight和Price的散点图
import plotly.express as px
fig = px.scatter(x=data['Carat Weight'], y=data['Price'], facet_col = data['Cut'], opacity = 0.25, template = 'plotly_dark', trendline='ols', trendline_color_override = 'red', title = 'SARAH GETS A DIAMOND - A CASE STUDY')
fig.show()

我们绘制并了解一下目标变量Price的分布。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 绘制灰度图查看分布
fig = px.histogram(data, x=["Price"], template = 'plotly_dark', title = 'Histogram of Price')
fig.show()

可以从上图看出Price是明显右偏分布的,对于有偏的分布,我们可以做一些数据变换以调整数据分布,比如对数变换,下面我们先用对数变换对Price进行处理。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

# 构建一份数据备份
data_copy = data.copy()

# log对数变换
data_copy['Log_Price'] = np.log(data['Price'])

# 绘制灰度图查看分布
fig = px.histogram(data_copy, x=["Log_Price"], title = 'Histgram of Log Price', template = 'plotly_dark')

fig.show()

大家可以明显看到,经过log变换后的数据分布,更加接近正态分布。

💡 数据准备

我们先导入PyCaret工具库,并做基本的设置。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 初始化
from pycaret.regression import *
s = setup(data, target = 'Price', transform_target = True)

注意上面的 transform_target = True,PyCaret会对Price字段使用 box-cox 变换,这个变换与对数转换是类似的,也能对有偏分布进行校正。

💡 模型选择&训练&调优

数据准备完毕后,我们使用模型对其进行训练,pycaret中最简单的方式是使用 compare_models函数,它使用交叉验证来训练和评估模型库中可用的模型,它的返回值是具有平均交叉验证分数的评分网格。 这个过程只需要下列简单代码:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 对所有可用模型进行实验和评估
best = compare_models()

上图是最终的实验结果,我们可以看到,对所有模型使用平均绝对误差 (MAE) 评估,CatBoost Regressor模型有最好的效果。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 训练模型的预估结果残差
plot_model(best, plot = 'residuals_interactive')
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 输出特征重要度
plot_model(best, plot = 'feature')

💡 模型保存

我们把最优模型保存为 pickle 文件。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 最佳模型
final_best = finalize_model(best)

# 存储模型
save_model(final_best, 'diamond-pipeline')

💡 模型部署

下面我们演示使用FastAPI框架快速构建模型服务,并提供实时预估的能力。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 导入工具库
import pandas as pd
from pycaret.regression import load_model, predict_model
from fastapi import FastAPI
import uvicorn

# 构建app对象
app = FastAPI()

# 加载模型
model = load_model('diamond-pipeline')

# 定义预估函数
@app.post('/predict')
def predict(carat_weight, cut, color, clarity, polish, symmetry, report):
    data = pd.DataFrame([[carat_weight, cut, color, clarity, polish, symmetry, report]])
    data.columns = ['Carat Weight', 'Cut', 'Color', 'Clarity', 'Polish', 'Symmetry', 'Report']

    predictions = predict_model(model, data=data) 
    return {'prediction': int(predictions['Label'][0])}

if __name__ == '__main__':
    uvicorn.run(app, host='127.0.0.1', port=8000)

接下来可以通过终端命令行运行以下命令来运行这个服务,大家确保运行命令的路径和上述python脚本和以及模型存储pickle文件在同一位置。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
uvicorn main:app --reload

命令执行完后,我们就在 localhost 上初始化 API 服务了,大家在浏览器上输入 http://localhost:8000/docs ,会显示如下内容:

点击页面中绿色的 POST 按钮,它将打开一个像这样的表单:

点击右上角的『Try it out』 ,在表单填入一些值,然后点击『Execute』,我们会看到以下响应:

我们可以使用 python 的 requests 库测试一下,远程发起请求是否可以得到结果,如下图所示:

大家可以看看,我们通过传参的方式对模型服务发起请求,并得到返回结果。

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
linux学习--未整理命令
find /path -type f -exec rm -f {} ; 删除指定文件
solate
2019/07/19
1K0
linux常见的压缩指令
xzcat,xz -d,xzmore,xzgrep,xzless和等级压缩同gzip用法相同.
小柒吃地瓜
2020/04/23
5.5K0
19个Linux备份压缩命令
文 | 云豆 来源 | 菜鸟教程 云豆贴心提醒,本文阅读时间5分钟,文末有秘密! Linux ar命令 Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。 ar可让您集合许
小小科
2018/05/04
2K0
19个Linux备份压缩命令
Linux服务器备份工具(tar,cpio,dump)
1、备份前因考虑的因素 ● 可移植性(即在Red Hat Linux系统下执行的备份在另外一个系统上恢复的能力)。 ● 是否自动备份。 ● 执行备份的周期。 ● 需要把归档的备份保存多长时间。 ● 用户界面的友好性(决定是否需要选择基于GUI界面的工具还是基于文本的)。 ● 是否需要使用压缩技术、直接复制或者加密技术。 ● 备份介质(需要从价格、性能、存储能力上考虑)。 ● 是否远程备份或网络备份。 ● 是保存一个文件、一个子目录还是整个系统。
星哥玩云
2022/07/03
1.8K0
ORACLE备份恢复
备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本
全栈程序员站长
2022/09/13
2.8K0
ORACLE备份恢复
Linux 备份与恢复
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统, 还会造成数据丢失。所以我们可以使用备份和恢复技术
用户9615083
2022/12/25
5.4K0
Linux 备份与恢复
【Linux】备份与恢复
-c : 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。
兮动人
2022/02/27
6K0
97 条 Linux 运维工程师常用命令总结
作者:jeanheo 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出文件的详细信息 -c 根据ctime排序显示 -t 根据文件修改时间排序 ---color[=WHEN] 用色彩辨别文件类型 WHEN 可以是'never'、'always'或'auto'其中之一 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅
小小科
2018/05/04
3.6K0
HAWQ技术解析(十五) —— 备份恢复
一、为什么还需要备份         HAWQ作为一个数据库管理系统,备份与恢复是其必备功能之一。HAWQ的用户数据存储在HDFS上,系统表存储在master节点主机本地。HDFS上的每个数据块缺省自
用户1148526
2018/01/03
2.2K0
HAWQ技术解析(十五) —— 备份恢复
linux下打包命令_linux常用命令全集
大家好,又见面了,我是你们的朋友全栈君。 linux系统中遇到要打包文件的时候我们该使用什么命令呢?下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux系统中打包文件的命令详解的相
全栈程序员站长
2022/09/23
1.6K0
生信入门必须掌握的 30 个 Linux 命令
修改工作目录,cd 和 ls 应该是使用最多的两个命令,尤其是对于 Linux 目录结构不熟的用户。
章鱼猫先生
2021/10/15
2.7K1
从零开始学PostgreSQL (六): 备份和恢复
PostgreSQL 提供了多种备份和恢复策略,旨在满足不同规模和需求的数据库环境。以下是 PostgreSQL 备份和恢复的主要方法概览:
DBA实战
2024/09/06
6530
从零开始学PostgreSQL (六): 备份和恢复
Linux私房菜:打包、压缩和备份
目前常见的Linux压缩命令包括有gzip、bzip2和最新的xz,下表是一些常见的压缩文件扩展名及对应指令关系:
happyJared
2018/10/25
1.6K0
Linux私房菜:打包、压缩和备份
PostgreSQL备份恢复实现
本文主要介绍pg_dump、pg_dumpall、copy、pg_basebackup的使用。
数据和云
2021/09/22
5.6K0
PostgreSQL备份恢复实现
PostgreSQL 备份与恢复(第一章)
PostgreSQL官方文档指定了以下三种备份方法,详见:https://www.postgresql.org/docs/current/backup.html
DB之路
2021/07/14
10K0
linux卸载nps,Linux NPS服务部署
yum install nfs-utils #如果检查的结果是没有安装,则使用该命令安装
全栈程序员站长
2022/08/15
1.4K0
数据库PostrageSQL-备份和恢复
由于包含着有价值的数据,PostgreSQL数据库应当被定期地备份。虽然过程相当简单,但清晰地理解其底层技术和假设是非常重要的。 有三种不同的基本方法来备份PostgreSQL数据:
cwl_java
2020/12/22
2.3K0
快速备份恢复工具mydumper/myloader
一 前言 大家对于MySQL的逻辑备份工具mysqldump应该都比较了解,本文介绍一款由MySQL ,Facebook 等公司的开发维护另外一套逻辑备份恢复工具---mydumper/myloader。 目前已经开发到0.9.1 版本。 mydumper 具有如下特性 1 支持多线程导出数据,速度比mysqldump快,生产上150G 导出到本地SSD磁盘40min 。 2 支持一致性备份,使用FTWRL(FLUSH TABLES WITH READ LOCK)会阻塞DML语句,保证备份数据的一致性。 3 支持将导出文件压缩,节约空间。 4 支持多线程恢复。 5 支持以守护进程模式工作,定时快照和连续二进制日志 6 支持按照指定大小将备份文件切割。 7 数据与建表语句分离。
用户1278550
2018/08/09
5.4K0
Linux快速入门02-文件系统管理
继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚。 文件属性基本概念:文件所有者,文件组,其他人。 对上图来说,-rw-r—r—表示文件的权限,1表示连接数,两个root分
用户1216676
2018/01/24
1.3K0
Linux快速入门02-文件系统管理
GreenPlum备份和恢复工具之gpbackup和gprestore
Greenplum数据库支持并行和非并行方法来备份和还原数据库。并行操作可扩展,而与系统中段的数量无关,因为段主机各自将数据同时写入本地磁盘存储中。对于非并行备份和还原操作,必须通过网络将数据从网段发送到主服务器,主服务器将所有数据写入其存储中。除了将I/O限制在一台主机之外,非并行备份还要求主服务器具有足够的本地磁盘存储空间来存储整个数据库。
AiDBA宝典
2023/11/06
2.1K1
GreenPlum备份和恢复工具之gpbackup和gprestore
相关推荐
linux学习--未整理命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验