关于数据挖掘:钻石价格预测的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全流程!从模型构建调优道部署利用!](http://www.showmeai.tech/arti…) 『 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全流程!从模型构建调优道部署利用!](http://www.showmeai.tech/arti…) 『 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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理