使用Python和Flask构建简单的机器学习API

news2025/6/8 5:41:39

在机器学习项目中,将模型部署为一个Web API是一种常见的需求。这样可以方便地将模型集成到其他应用程序中,例如移动应用、Web应用或其他后端服务。Flask是一个轻量级的Python Web框架,非常适合用于构建简单的API。本文将通过一个具体的例子,介绍如何使用Flask将一个机器学习模型部署为一个Web API。
一、环境准备
在开始之前,请确保你的开发环境中已经安装了Python、Flask和Scikit-Learn。如果尚未安装,可以通过以下命令安装:

pip install flask scikit-learn

此外,我们还将使用numpy和pandas库来处理数据:

pip install numpy pandas

二、训练一个简单的机器学习模型
我们将使用著名的鸢尾花(Iris)数据集来训练一个简单的分类模型。鸢尾花数据集包含150个样本,每个样本有4个特征,分别对应鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度。目标是根据这些特征预测鸢尾花的种类。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import joblib

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 保存模型
joblib.dump(model, 'iris_model.pkl')

三、构建Flask Web API
接下来,我们将使用Flask构建一个简单的Web API,用于接收输入数据并返回模型的预测结果。
(一)安装Flask
如果你尚未安装Flask,可以通过以下命令安装:

pip install flask

(二)创建Flask应用
创建一个名为app.py的文件,并编写以下代码:

from flask import Flask, request, jsonify
import numpy as np
import joblib

app = Flask(__name__)

# 加载模型
model = joblib.load('iris_model.pkl')

@app.route('/predict', methods=['POST'])
def predict():
    # 获取输入数据
    data = request.get_json(force=True)
    features = np.array(data['features']).reshape(1, -1)
    
    # 进行预测
    prediction = model.predict(features)
    return jsonify({'prediction': int(prediction[0])})

if __name__ == '__main__':
    app.run(debug=True)

(三)运行Flask应用
在终端中运行以下命令启动Flask服务器:

python app.py

默认情况下,Flask服务器会在http://127.0.0.1:5000上运行。
四、测试API
我们可以使用curl命令或Postman工具来测试我们的API。
(一)使用curl命令测试
打开终端,运行以下命令:

curl -X POST -H "Content-Type: application/json" -d '{"features": [5.1, 3.5, 1.4, 0.2]}' http://127.0.0.1:5000/predict

你应该会看到类似以下的输出:

{
  "prediction": 0
}

(二)使用Postman测试
1.  打开Postman,创建一个新的POST请求。
2.  将请求URL设置为http://127.0.0.1:5000/predict。
3.  在请求体中选择raw和JSON格式,输入以下内容:

{
  "features": [5.1, 3.5, 1.4, 0.2]
}

4.  点击“Send”按钮,查看返回的预测结果。
五、部署到生产环境
在开发环境中,我们通常使用app.run(debug=True)来启动Flask应用。然而,在生产环境中,建议使用更强大的WSGI服务器,例如Gunicorn。
(一)安装Gunicorn
通过以下命令安装Gunicorn:

pip install gunicorn

(二)使用Gunicorn启动应用
在终端中运行以下命令启动应用:

gunicorn -w 4 app:app

这将使用4个工作进程启动Flask应用。
六、总结
通过本文,我们介绍了如何使用Python和Flask构建一个简单的机器学习API。我们训练了一个简单的分类模型,并将其保存为文件。然后,我们使用Flask创建了一个Web API,用于接收输入数据并返回模型的预测结果。最后,我们测试了API,并介绍了如何将其部署到生产环境。
希望这篇文章能够帮助读者更好地理解和应用机器学习模型的部署技术,将模型集成到实际应用中。
----
希望这篇文章能够满足你的需求!如果需要进一步调整或补充,请随时告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2403776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka入门-消费者

消费者 Kafka消费方式:采用pull(拉)的方式,消费者从broker中主动拉去数据。使用pull的好处就是消费者可以根据自身需求,进行拉取数据,但是坏处就是如果Kafka没有数据,那么消费者可能会陷入循环…

中电金信:从智能应用到全栈AI,大模型如何重构金融业务价值链?

导语 当前,AI大模型技术正加速重构金融行业的智能化图景。为助力金融机构精准把握这一变革机遇,中电金信与IDC联合发布《中国金融大模型发展白皮书》。《白皮书》在梳理了AI大模型整体发展现状的基础上,结合金融行业用户的需求调研深入分析了…

巴西医疗巨头尤迈Kafka数据泄露事件的全过程分析与AI安防策略分析

一、事件背景与主体信息 涉事主体:Unimed,全球最大医疗合作社,巴西医疗行业龙头企业,拥有约1500万客户。技术背景:泄露源于其未保护的Kafka实例(开源实时数据传输平台),用于客户与聊天机器人“Sara”及医生的实时通信。二、时间线梳理 时间节点关键事件描述2025年3月24…

快速上手 Metabase:从安装到高级功能实战

文章目录 1. 引言:Metabase——轻量级的数据分析工具🎯 学完本教程你能掌握: 2. 安装 Metabase:本地部署实操2.1 环境准备2.2 使用 Docker 安装 Metabase2.3 初始化设置2.4 连接外部数据库 3. 第一个数据探索:5分钟创建…

Linux基础命令which 和 find 简明指南

🎯 Linux which 和 find 命令简明指南:从入门到实用 📅 更新时间:2025年6月7日 🏷️ 标签:Linux | which | find | 命令行 | 文件查找 文章目录 前言🌟 一、Linux 命令的本质与 which、find 的作…

思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发

在RISC-V生态快速发展和应用场景不断拓展的背景下,芯片设计正面临前所未有的复杂度挑战。近日,RISC-V处理器核领先厂商Andes晶心科技与思尔芯(S2C)达成重要合作,其双核单集群AX45MPV处理器已在思尔芯最新一代原型验证系…

kafka消息积压排查

kafka监控搭建:https://insights.blog.csdn.net/article/details/139129552?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7EPaidSort-1-139129552-blog-132216491.235%5Ev43%5Econtrol…

drawio 开源免费的流程图绘制

开源地址 docker-compose 一键启动 #This compose file adds draw.io to your stack version: 3.5 services:drawio:image: jgraph/drawiocontainer_name: drawiorestart: unless-stoppedports:- 8081:8080- 8443:8443environment:PUBLIC_DNS: domainORGANISATION_UNIT: unitOR…

YOLOv8 升级之路:主干网络嵌入 SCINet,优化黑暗环境目标检测

文章目录 引言1. 低照度图像检测的挑战1.1 低照度环境对目标检测的影响1.2 传统解决方案的局限性 2. SCINet网络原理2.1 SCINet核心思想2.2 网络架构 3. YOLOv8与SCINet的集成方案3.1 总体架构设计3.2 关键集成代码3.3 训练策略 4. 实验结果与分析4.1 实验设置4.2 性能对比4.3 …

传输层:udp与tcp协议

目录 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 netstat pidof 如何学习下三层协议 UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议段格式 1.源端口号…

centos7.9源码安装zabbix7.12,求赞

centos7.9源码安装zabbix7.12-全网独有 3.CentOS7_Zabbix7.0LTS3.1.安装环境3.2.换成阿里源3.3.安装相关依赖包3.3.1.直接安装依赖3.3.2.编译安装-遇到问题01-net-snmp3.3.3.编译安装-遇到问题02-libevent3.3.4.编译安装-遇到问题03-安装openssl 3.4.创建用户和组3.5.下载上传源…

亚远景科技助力东风日产通过ASPICE CL2评估

热烈祝贺东风日产通过ASPICE CL2评估 近日,东风日产PK1B VCM热管理项目成功通过ASPICE CL2级能力评估,标志着东风日产在汽车电子软件研发管理体系及技术创新能力上已达到国际领先水平,为其全球化布局注入强劲动能。 ASPICE:国际竞…

基于JWT+SpringSecurity整合一个单点认证授权机制

基于 JWT Spring Security 的授权认证机制,在整体架构设计上体现了高度的安全性与灵活性。其在整合框架中的应用,充分展示了模块化、可扩展性和高效鉴权的设计理念,为开发者提供了一种值得借鉴的安全架构模式。 1.SpringSecurity概念理解 …

IDEA 打开文件乱码

问题:文件乱码 底部编码无法切换 解决方案: 第一步 使用Nodepad 查询文件编码 本项目设置为 转为 UTF-8 无 BOM 第二步:在 IntelliJ IDEA 中:右键点击文件 → File Encoding → 选择目标编码(如 UTF-8) 最…

第2章:Neo4j安装与配置

在了解了Neo4j的基本概念和优势之后,下一步就是将其安装并配置好,以便开始实际操作。本章将详细介绍Neo4j的各种部署方式,涵盖不同操作系统的安装步骤,深入探讨关键配置项,并介绍常用的管理工具,为读者顺利…

Shell 命令及运行原理 + 权限的概念(7)

文章目录 Shell 命令以及运行原理(4-1.22.08)Linux权限的概念1. 什么是权限2. 认识人(普通用户,root用户)以及两种用户的切换认识普通用户和root用户两种用户之间的切换指令提权 3. 文件的属性解析 权限属性指令ll显示…

抽奖系统核心——抽奖管理

目录 前端逻辑: 核心全局变量: reloadConf函数: nextStep函数: 后端实现: 抽奖接口: Controller层: Service层: MqReceiver: drawPrizeService: statusConvert()方法: activityStatu…

机器学习:集成学习概念和分类、随机森林、Adaboost、GBDT

本文目录: 一、集成学习概念**核心思想:** 二、集成学习分类(一)Bagging集成(二)Boosting集成(三)两种集成方法对比 三、随机森林(一)构造过程(二…

基于J2EE架构的在线考试系统设计与实现【源码+文档】

目录 摘要: Abstract: 1 引言 2 在线考试系统构架 2.1 在线考试系统一般需求分析 2.2 当前在线考试系统现状分析 2.3 基于J2EE的在线考试系统架构介绍及拥有的优势 2.3.1 结构总体介绍 2.3.2 客户层组件 2.3.2.1 Applets 2.3.2.2 应用程序客户端 2.3.3 …

联想拯救者R9000P 网卡 Realtek 8852CE Ubuntu/Mint linux 系统睡眠后,无线网卡失效

联想拯救者R9000P 网卡型号 Realtek PCle GbE Family Controller Realtek 8852CE WiFi 6E PCI-E NIC 系统版本 Ubuntu 24.04 / mint 22.1 问题现象 rtw89_8852ce,Link is Down,xtal si not ready,mac init fail,xtal si not …