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

2024-01-17 17:10

本文主要是介绍钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💡 作者:韩信子@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 工具库:

pip install pycaret

📌 FastAPI

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

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

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

我们也通过 pip 安装 fastapi:

pip install fastapi

💡 业务背景

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

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

ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub

💡 数据

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

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

💡 探索性数据分析

我们先做一些快速数据分析和可视化来评估数据字段属性(重量、切工、颜色、净度等)与目标变量/标签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()

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

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

可以从上图看出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()

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

💡 数据准备

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

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

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

💡 模型选择&训练&调优

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

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

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

# 训练模型的预估结果残差
plot_model(best, plot = 'residuals_interactive')
# 输出特征重要度
plot_model(best, plot = 'feature')

💡 模型保存

我们把最优模型保存为 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 ,会显示如下内容:

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

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

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

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

参考资料

  • 🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [13] 钻石价格预测的ML全流程!从模型构建调优道部署应用! 『** pycaret-master 数据集**』
  • ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub
  • 📘 PyCaret GitHub:https://www.github.com/pycaret/pycaret
  • 📘 FastAPI GitHub:https://github.com/tiangolo/fastapi
  • 📘 哈佛商学院 Sarah Gets a Diamond:https://hbsp.harvard.edu/product/UV0869-PDF-ENG

这篇关于钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616699

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6