如何利用 Python 创建机器学习模型
学习知识要善于思考,思考,再思考!今天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/
这个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学习网公众号了解相关技术文章。
修复:Windows 11 安装错误代码 0x80070
- 上一篇
- 修复:Windows 11 安装错误代码 0x80070
- 下一篇
- 如何在 Mac 上通过键盘快捷键打开活动监视器
-
- 科技周边 · 人工智能 | 8小时前 |
- PyTorch autograd anomaly detection 怎样定位 NaN 梯度
- 248浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- OpenAI Responses API 的 tool call 状态怎样串联
- 253浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- LangChain structured output 怎样固定工具返回 schema
- 165浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- vLLM continuous batching 的请求调度观察点
- 211浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- ONNX Runtime IO Binding 怎样减少 GPU 张量拷贝
- 424浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- PyTorch DataLoader persistent_workers 的进程生命周期
- 435浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- PyTorch DataLoader 如何限制预取批次避免共享内存耗尽
- 265浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- Transformers generate 怎样读取每条序列的分数
- 249浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- PyTorch CUDA Graph 怎样固定输入形状复用推理流程
- 471浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- Hugging Face Datasets 怎样用 map 批处理并保留列
- 329浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 | 人工智能 ·
- Transformers quantization picker 怎样按硬件选择量化方式
- 120浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- Transformers PEFT adapter 怎样只保存可训练权重
- 422浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 821次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 816次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 905次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 876次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 698次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

