用Streamlit+FastAPI打造机器学习应用:从本地调试到Docker部署全流程

用Streamlit+FastAPI打造机器学习应用:从本地调试到Docker部署全流程

在数据科学和机器学习领域,快速构建和部署应用一直是个挑战。传统方法需要前端开发、后端API和部署运维的多方面技能,而Streamlit和FastAPI的组合彻底改变了这一局面。本文将带你从零开始,通过一个汽车评估案例,完整演示如何构建前后端分离的机器学习应用,并最终通过Docker容器化部署。

1. 技术栈选择与项目架构设计

Streamlit和FastAPI的组合为数据科学家提供了全栈开发能力。Streamlit以其极简的Python API著称,能让开发者用几行代码构建交互式Web界面。FastAPI则是高性能的Python Web框架,特别适合构建机器学习API服务。

我们的汽车评估应用将采用前后端分离架构:

  • 前端:Streamlit构建用户界面,收集用户输入并展示预测结果
  • 后端:FastAPI提供RESTful API,处理模型推理请求
  • 部署:Docker容器化,使用Docker Compose编排服务

这种架构的优势在于:

  • 前后端开发完全解耦,可独立迭代
  • 容器化部署确保环境一致性
  • 易于扩展为微服务架构

2. 环境准备与依赖安装

开始编码前,我们需要设置开发环境。推荐使用Python 3.8+和虚拟环境:

# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

# 安装核心依赖
pip install streamlit fastapi uvicorn pandas scikit-learn

对于汽车评估案例,我们将使用UCI的Car Evaluation数据集。可以通过以下代码快速加载:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# 加载数据集
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data"
columns = ["buying", "maint", "doors", "persons", "lug_boot", "safety", "class"]
data = pd.read_csv(url, names=columns)

# 数据预处理
X = pd.get_dummies(data.drop("class", axis=1))
y = data["class"].astype("category").cat.codes

# 训练简单模型
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = RandomForestClassifier().fit(X_train, y_train)

3. 构建FastAPI后端服务

FastAPI后端负责模型推理,我们将创建一个标准的RESTful API:

# api/main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
import pandas as pd
import joblib

app = FastAPI()

# 定义请求体模型
class CarFeatures(BaseModel):
    buying: str
    maint: str
    doors: str
    persons: str
    lug_boot: str
    safety: str

# 加载预训练模型
model = joblib.load
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值