FastAPI将机器学习模型转换为Python API示例
学习如何使用 FastAPI 库将机器学习模型转换为 Python 中的 API。FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示。我们将使用Titanic 数据集和逻辑回归模型(示例)。
为什么选择 FastAPI?
FastAPI 具有以下优点:
- 基于 Python 类型提示,自动生成文档。
- 性能优异,与 Flask 相比,FastAPI 更快。
- 支持异步请求处理。
环境准备
首先,确保您的环境中安装了以下库:
- fastapi
- uvicorn
- pandas
- scikit-learn
- numpy
您可以使用 pip 安装这些库:
pip install fastapi uvicorn pandas scikit-learn numpy
步骤 1: 加载和预处理数据
我们将使用 Titanic 数据集,并进行必要的预处理。
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.impute import SimpleImputer
# 加载数据
df = pd.read_csv("train.csv")
include = ['Age', 'Sex', 'Embarked', 'Survived']
df = df[include]
# 处理缺失值
imputer = SimpleImputer(strategy='median')
df['Age'] = imputer.fit_transform(df[['Age']])
# 编码分类特征
label_encoder = LabelEncoder()
df['Sex'] = label_encoder.fit_transform(df['Sex'])
onehot_encoder = OneHotEncoder(sparse=False, drop='first', handle_unknown='ignore')
df = pd.get_dummies(df, columns=['Embarked'], dummy_na=True)
步骤 2: 训练机器学习模型
我们将使用逻辑回归模型进行训练。
from sklearn.linear_model import LogisticRegression
# 定义特征和标签
X = df.drop('Survived', axis=1)
y = df['Survived']
# 训练模型
model = LogisticRegression()
model.fit(X, y)
步骤 3: 创建 FastAPI 应用
我们将创建一个 FastAPI 应用,用于加载模型并提供预测。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.externals import joblib
app = FastAPI()
# 加载模型
model = joblib.load('model.pkl') # 需要将前面的模型保存,命名model.pkl
class PredictionRequest(BaseModel):
Age: float
Sex: int
Embarked_C: int = 0
Embarked_Q: int = 0
Embarked_S: int = 0
Embarked_nan: int = 0
@app.post("/predict/")
async def predict(request: PredictionRequest):
"""
接收乘客信息并返回生存预测。
"""
try:
# 创建 DataFrame 并进行预测
input_df = pd.DataFrame([request.dict()])
prediction = model.predict(input_df)
return {"prediction": int(prediction[0])}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
步骤 4: 运行 FastAPI 应用
使用 Uvicorn 作为 ASGI 服务器运行 FastAPI 应用。
uvicorn your_script_name:app --reload
将 your_script_name
替换为您的 Python 脚本名称。
测试 API
您可以使用 Postman 或任何其他 API 客户端测试您的 API。发送 POST 请求到 http://127.0.0.1:8000/predict/
并包含 JSON 负载,例如:
{
"Age": 25.0,
"Sex": 1,
"Embarked_C": 0,
"Embarked_Q": 0,
"Embarked_S": 1,
"Embarked_nan": 0
}
总结
在本教程中,我们学习了如何使用 FastAPI 将机器学习模型转换为 Python 中的 API。我们预处理了数据,训练了一个逻辑回归模型,并创建了一个简单的 FastAPI 应用来提供预测。FastAPI 提供了一种快速且高效的方式来构建和部署机器学习模型的 API。
来源:python收藏家
THE END