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

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

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

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

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

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

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

💡 工具库

📌 PyCaret

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

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

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

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

pip install pycaret

📌 FastAPI

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

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

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

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

我们也通过 pip 安装 fastapi:

pip install fastapi

💡 业务背景

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

🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『 实战』,或者点击 这里 获取本文 [13] 钻石价格预测的ML全流程!从模型构建调优道部署应用! pycaret-master 数据集

ShowMeAI官方GitHubhttps://github.com/ShowMeAI-Hub

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

💡 数据

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

加载数据
from pycaret.datasets import get_data
data = get_data('diamond')

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

💡 探索性数据分析

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

绘制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()

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

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

绘制灰度图查看分布
fig = px.histogram(data, x=["Price"], template = 'plotly_dark', title = 'Histogram of Price')
fig.show()

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

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

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()

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

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

💡 数据准备

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

初始化
from pycaret.regression import *
s = setup(data, target = 'Price', transform_target = True)

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

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

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

💡 模型选择&训练&调优

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

对所有可用模型进行实验和评估
best = compare_models()

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

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

训练模型的预估结果残差
plot_model(best, plot = 'residuals_interactive')

钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵
输出特征重要度
plot_model(best, plot = 'feature')

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

💡 模型保存

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

最佳模型
final_best = finalize_model(best)

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

💡 模型部署

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

导入工具库
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文件在同一位置。

uvicorn main:app --reload

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

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

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

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

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

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

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

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

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

参考资料

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

Original: https://www.cnblogs.com/showmeai/p/16567790.html
Author: ShowMeAI
Title: 钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613175/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何把返回的datatable按某个字段 排序 升序或者降序

    如何把返回的datatable按某个字段 排序 升序或者降序 DataTable dtdata = GetXmlData(doc, “DetailList”…

    数据库 2023年6月9日
    069
  • Redis的Java客户端

    Redis 的 Java 客户端 Jedis 优点:以 Redis 命令作为方法名称,学习成本低廉,简单且实用 缺点:Jedis 的实例是线程不安全的,在多线程的环境下需要基于线程…

    数据库 2023年6月16日
    090
  • Mysql_事务_存储过程_触发器

    一、什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库…

    数据库 2023年6月11日
    096
  • IDEA插件和个性化配置推荐

    插件推荐 我自己现在使用的一些插件和一些自己感觉比较舒服配置分析给大家 idea如何安装插件: 如果打开设置没有看到,直接搜索plugins 然后在这里搜索即可 CodeGlanc…

    数据库 2023年6月16日
    098
  • 设置颜色与画笔

    设置画笔 默认情况下,Graphics绘图类 使用的画笔属性是粗细为I个像素的正方形,而Graphics2D类可以调用 setStroke()方法 设置画笔的属性,如改变线条的粗细…

    数据库 2023年6月16日
    094
  • 不扒瞎,这个程序让我从300s优化到了10s

    /*** RedisTemplate配置* @param lettuceConnectionFactory* @return*/ @Be…

    数据库 2023年6月9日
    064
  • 项目主干分支的server.sh被“覆盖”了?一个配置,解除烦恼

    我司项目利用springboot搭建,应用在部署到各环境后,程序启动命令靠的是我们在工程里配置的 scripts/server.sh。这个server.sh里最重要的东西是程序启动…

    数据库 2023年6月9日
    0109
  • 如何设计一个更通用的查询接口

    临近放假,手头的事情没那么多,老是摸鱼也不好,还是写写博客吧。 今天来聊聊: 如何设计一个通用的查询接口。 首先,我们从一个简单的场景开始。现在,我需要一个订单列表,用来查询【我的…

    数据库 2023年6月6日
    0103
  • 云数据库技术行业动态@2022-09-30

    重要更新 时序数据库厂商「格睿云Greptime」已于近期完成天使轮融资。据介绍,本轮融资金额在数百万美金级别,由耀途资本领投,九合创投跟投。Greptime成立于2022年4月,…

    数据库 2023年6月11日
    0109
  • Redis安装

    Redis For Windows 安装 Redis 官方只提供源码包,不支持Windows 老版本 Windows 版本下载地址(最高版本为3)老版本地址 新版本 Windows…

    数据库 2023年6月6日
    097
  • Redis缓存穿透 缓存击穿 解析

    先解析一下Redis中什么叫做 缓存穿透 和 缓存击穿: 缓存穿透:首先我们要明确概念,缓存穿透是 在查询数据时 查询的数据在 redis 和 DB中都没有的 叫做缓穿透,解决方案…

    数据库 2023年6月9日
    085
  • mysql范式

    mysql范式: mysql建表的规范格式 第一范式:保证每列的原子性(字段不能再分解) 第一种范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,则数据库满足第一…

    数据库 2023年5月24日
    092
  • mysql8使用tmpfs内存磁盘当内存数据库的配置方法

    内存关系数据库没有找到开源好用的,很多都是商用。虽然mysql有memory引擎,但写是整体锁表,没法用。 一直想将mysql放入内存中,搜索n次资料,没找到合适的,可能之前思路不…

    数据库 2023年6月14日
    093
  • DistSQL 深度解析:打造动态化的分布式数据库

    一、背景 自 ShardingSphere 5.0.0 版本发布以来,DistSQL 为 ShardingSphere 生态带来了强大的动态管理能力,通过 DistSQL,用户可以…

    数据库 2023年6月16日
    075
  • 数据结构入门之用链表模拟栈

    1:栈的介绍: LIFO(last in first out)表示就是后进入的元素, 第一个弹出栈空间.往往先把拿出去使用. 其限制是仅允许在表的一端进行插入和删除运算。这一端被称…

    数据库 2023年6月6日
    080
  • Python–paramiko

    paramiko包含两个核心组件:SSHClient和SFTPClient。 SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Trans…

    数据库 2023年6月9日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球