当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > 如何利用 Python 创建机器学习模型

如何利用 Python 创建机器学习模型

来源:51CTO.COM 2023-05-03 19:33:29 0浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何利用 Python 创建机器学习模型》,以下内容主要包含等知识点,如果你正在学习或准备学习科技周边,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

导读

你是否会遇到这样的场景,当你训练了一个新模型,有时你不想费心编写 Flask Code(Python的web 框架)或者将模型容器化并在 Docker 中运行它,就想通过 API 立即使用这个模型?

如果你有这个需求,你肯定想了解MLServer。它是一个基于Python的推理服务器,最近推出了GA(Genetic Algorithms 遗传算法)的版本,这是一款专为生产环境设计的高性能服务器。

使用它可以确保在本地构建模型,与投入生产环境的模型保持一致。

本文以几个图像模型为例,向您介绍如何使用 MLServer。

数据集

我们要使用的数据集是Fashion MNIST。它包含 70,000 张灰度 28x28 像素的服装图像,涵盖 10 个不同类别(如上衣、连衣裙、外套、裤子等)。

如果您想重现本文中的代码,请确保下载文件并将它们解压缩到名为 data. 因为文件非常大,GitHub 存储库中省略了它们。

1.训练 Scikit-learn 模型

首先,我们将使用scikit-learn框架训练一个支持向量机(SVM) 模型。然后我们将模型保存到一个名为Fashion-MNIST.joblib 的文件中。

import pandas as pd
from sklearn import svm
import time
import joblib

#Load Training Data
train = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)
y_train = train['label']
X_train = train.drop(['label'], axis=1)
classifier = svm.SVC(kernel="poly", degree=4, gamma=0.1)

#Train Model
start = time.time()
classifier.fit(X_train.values, y_train.values)
end = time.time()
exec_time = end-start
print(f'Execution time: {exec_time} seconds')

#Save Model
joblib.dump(classifier, "Fashion-MNIST.joblib")

注意:SVM 算法不是特别适合大型数据集,因为它具有二次性质。根据您的硬件,此示例中的模型将需要几分钟的时间来训练。

2.服务于 Scikit-learn 模型

通过上面的步骤我们的到一个模型文件Fashion-MNIST.joblib。接下来看看如何使用 MLServer 来提供服务。

首先,通过如下命令安装 MLServer:pip install mlserver。

虽然额外的运行时组件是可选的,但在服务模型时更加顺畅,我们也会安装 Scikit-Learn 和 XGBoost 的扩展。。

完成pip install mlserver-sklearn mlserver-xgboost操作后,就需要添加如下两个配置文件:

(1)settings.json- 这包含服务器本身的配置。

(2)model-settings.json- 顾名思义,此文件包含要运行的模型配置。

对于settings.json文件,只定义一个参数就足够了:

{
"debug": "true"
}

该model-settings.json文件需要更多信息,因为它需要了解服务模型信息:

{
"name": "fashion-sklearn",
"implementation": "mlserver_sklearn.SKLearnModel",
"parameters": {
"uri": "./Fashion_MNIST.joblib",
"version": "v1"
}
}

name 参数为 MLServer 提供了唯一标识符,在多模型服务场景下特别有用(稍后会谈到)。定义要使用的implementation从而预构建服务器(如果有)。它与用于训练模型的机器学习框架高度耦合。在我们的案例中使用 scikit-learn来训练模型,因此将使用 scikit-learn 实现 MLServer。Parameters配置需要提供模型文件的位置以及版本号。

通过上面的配置,就可以使用以下命令为我们的模型提供服务:mlserver start .

就这么简单,现在已经让模型在本地服务器上运行起来了。此时,它已经可以接受类似 HTTP 和 gRPC(默认端口为8080和8081)的请求了。

3.测试模型

模型已经启动并正常运行了,让我们发送一些请求测试它的运行情况。

我们会通过如下URL 发送一个 POST 请求:

http://localhost:8080/v2/models//versions//infer

这个URL意味着访问之前训练的 scikit-learn 模型,这里只需要将MODEL_NAME用fashion-sklearn的模型名称进行替换,同时将VERSION用v1进行替换。

下面的代码展示如何导入测试数据,向模型服务器发出请求,然后将结果与实际标签进行比较:

import pandas as pd
import requests

#Import test data, grab the first row and corresponding label
test = pd.read_csv('../../data/fashion-mnist_test.csv', header=0)
y_test = test['label'][0:1]
X_test = test.drop(['label'],axis=1)[0:1]

#Prediction request parameters
inference_request = {
"inputs": [
{
"name": "predict",
"shape": X_test.shape,
"datatype": "FP64",
"data": X_test.values.tolist()
}
]
}
endpoint = "http://localhost:8080/v2/models/fashion-sklearn/versions/v1/infer"

#Make request and print response
response = requests.post(endpoint, json=inference_request)
print(response.text)
print(y_test.values)

运行上面的test.py之后,会从 MLServer 得到以下响应:

"model_name": "fashion-sklearn",
"model_version": "v1",
"id": "31c3fa70-2e56-49b1-bcec-294452dbe73c",
"parameters": null,
"outputs": [
{
"name": "predict",
"shape": [
1
],
"datatype": "INT64",
"parameters": null,
"data": [
0
]
}
]
}

从响应中可以得知, MLServer 已经生成了一个请求 ID,并自动添加用于服务请求的模型和版本的元数据。一旦模型投入生产,收集类似的元数据就显得非常重要。它允许我们记录每个请求从而方便进行审计和故障排除。

您可能还注意到 MLServer 返回一个数组outputs。虽然在请求中只发送了一行数据,但 MLServer处理批量请求,并一起返回。我们甚至可以通过一种称为自适应批处理的技术来优化在生产环境中处理多个请求的方式。

在上面的示例中,也可以找到模型的预测的结果。outputs[0].data表明模型已将该样本标记为类别0(数值 0 对应于类别t-shirt/top)。该样本的真实标签0也是如此,因此模型得到了正确的预测。

4.训练 XGBoost 模型

通过上面的例子我们了解了如何使用 MLServer 创建单个模型,接下来让我们看看如何处理在不同框架中训练的多个模型。

依旧使用 Fashion MNIST 数据集,但这次将训练XGBoost模型。

import pandas as pd
import xgboost as xgb
import time

#Load Training Data
train = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)
y_train = train['label']
X_train = train.drop(['label'], axis=1)
dtrain = xgb.DMatrix(X_train.values, label=y_train.values)

#Train Model
params = {
'max_depth': 5,
'eta': 0.3,
'verbosity': 1,
'objective': 'multi:softmax',
'num_class' : 10
}
num_round = 50
start = time.time()
bstmodel = xgb.train(params, dtrain, num_round, evals=[(dtrain, 'label')], verbose_eval=10)
end = time.time()
exec_time = end-start
print(f'Execution time: {exec_time} seconds')

#Save Model
bstmodel.save_model('Fashion_MNIST.json')

上面用于训练 XGBoost 模型的代码与之前用于训练 scikit-learn 模型的代码类似,但是这一次,我们的模型为了兼容 XGBoost 的格式将其保存为Fashion_MNIST.json 文件.

5.服务多个模型

MLServer 的一大优点是支持多模型服务。这意味着不必为部署的每个 ML 模型创建或运行新服务器。使用上面构建的模型,将使用此功能同时为它们提供服务。

当 MLServer 启动时,它将在目录(和任何子目录)中搜索model-settings.json文件。如果您有多个model-settings.json文件,那么它将自动为所有文件提供服务。

 注意:您仍然只需要指定根目录中的 (服务器配置)文件settings.json

这是目录结构的细分以供参考:

.
├── data
├── fashion-mnist_test.csv
└── fashion-mnist_train.csv
├── models
├── sklearn
├── Fashion_MNIST.joblib
├── model-settings.json
├── test.py
└── train.py
└── xgboost
├── Fashion_MNIST.json
├── model-settings.json
├── test.py
└── train.py
├── README.md
├── settings.json
└── test_models.py

请注意,有两个model-settings.json文件 - 一个用于 scikit-learn 模型,一个用于 XGBoost 模型。

现在可以运行mlserver start .,它将开始处理两个模型的请求。

[mlserver] INFO - Loaded model 'fashion-sklearn' succesfully.
[mlserver] INFO - Loaded model 'fashion-xgboost' succesfully.

6.测试多个模型的准确性

现在两个模型都在 MLServer 上运行,我们可以使用测试集中的样本来验证每个模型的准确性。

以下代码向每个模型发送一个批处理请求(包含完整的测试集),然后将预测值与真实标签进行比较。在整个测试集上执行此操作,为我们提供了衡量每个模型准确性的方法,并将最终结果打印出来。

import pandas as pd
import requests
import json

#Import the test data and split the data from the labels
test = pd.read_csv('./data/fashion-mnist_test.csv', header=0)
y_test = test['label']
X_test = test.drop(['label'],axis=1)

#Build the inference request
inference_request = {
"inputs": [
{
"name": "predict",
"shape": X_test.shape,
"datatype": "FP64",
"data": X_test.values.tolist()
}
]
}

#Send the prediction request to the relevant model, compare responses to training labels and calculate accuracy
def infer(model_name, version):
endpoint = f"http://localhost:8080/v2/models/{model_name}/versions/{version}/infer"
response = requests.post(endpoint, json=inference_request)

#calculate accuracy
correct = 0
for i, prediction in enumerate(json.loads(response.text)['outputs'][0]['data']):
if y_test[i] == prediction:
correct += 1
accuracy = correct / len(y_test)
print(f'Model Accuracy for {model_name}: {accuracy}')

infer("fashion-xgboost", "v1")
infer("fashion-sklearn", "v1")

结果表明,XGBoost 模型略微优于 SVM scikit-learn 模型:

Model Accuracy for fashion-xgboost: 0.8953
Model Accuracy for fashion-sklearn: 0.864

总结

希望通过上面的描述,您已经了解使用MLServer服务模型大致过程。如果需要了解更多信息,您需要阅读相关文档并查看不同框架的示例。

对于MLFlow用户而言,可以使用 MLServer 直接在 MLFlow 中提供模型,如果您是Kubernetes用户,您应该了解Seldon Core ,它是一个将模型部署到Kubernetes 的开源工具(它在后台使用 MLServer) 。

译者介绍

崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。曾任惠普技术专家。乐于分享,撰写了很多热门技术文章,阅读量超过60万。《分布式架构原理与实践》作者。

参考链接:https://dzone.com/articles/How-to-Utilize-Python-Machine-Learning-Models

文中关于Python,机器学习的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何利用 Python 创建机器学习模型》文章吧,也可关注golang学习网公众号了解相关技术文章。

版本声明
本文转载于:51CTO.COM 如有侵犯,请联系study_golang@163.com删除
修复:Windows 11 安装错误代码 0x80070修复:Windows 11 安装错误代码 0x80070
上一篇
修复:Windows 11 安装错误代码 0x80070
如何在 Mac 上通过键盘快捷键打开活动监视器
下一篇
如何在 Mac 上通过键盘快捷键打开活动监视器
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 可图AI图片生成:快手可灵AI2.0引领图像创作新时代
    可图AI图片生成
    探索快手旗下可灵AI2.0发布的可图AI2.0图像生成大模型,体验从文本生成图像、图像编辑到风格转绘的全链路创作。了解其技术突破、功能创新及在广告、影视、非遗等领域的应用,领先于Midjourney、DALL-E等竞品。
    14次使用
  • MeowTalk喵说:AI猫咪语言翻译,增进人猫情感交流
    MeowTalk喵说
    MeowTalk喵说是一款由Akvelon公司开发的AI应用,通过分析猫咪的叫声,帮助主人理解猫咪的需求和情感。支持iOS和Android平台,提供个性化翻译、情感互动、趣味对话等功能,增进人猫之间的情感联系。
    14次使用
  • SEO标题Traini:全球首创宠物AI技术,提升宠物健康与行为解读
    Traini
    SEO摘要Traini是一家专注于宠物健康教育的创新科技公司,利用先进的人工智能技术,提供宠物行为解读、个性化训练计划、在线课程、医疗辅助和个性化服务推荐等多功能服务。通过PEBI系统,Traini能够精准识别宠物狗的12种情绪状态,推动宠物与人类的智能互动,提升宠物生活质量。
    17次使用
  • 可图AI 2.0:快手旗下新一代图像生成大模型,专业创作者与普通用户的多模态创作引擎
    可图AI 2.0图片生成
    可图AI 2.0 是快手旗下的新一代图像生成大模型,支持文本生成图像、图像编辑、风格转绘等全链路创作需求。凭借DiT架构和MVL交互体系,提升了复杂语义理解和多模态交互能力,适用于广告、影视、非遗等领域,助力创作者高效创作。
    19次使用
  • 毕业宝AIGC检测:AI生成内容检测工具,助力学术诚信
    毕业宝AIGC检测
    毕业宝AIGC检测是“毕业宝”平台的AI生成内容检测工具,专为学术场景设计,帮助用户初步判断文本的原创性和AI参与度。通过与知网、维普数据库联动,提供全面检测结果,适用于学生、研究者、教育工作者及内容创作者。
    32次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码