1. FastAPI简介
FastAPI 是一个现代、快速的 (高性能) Web 框架,用于构建 APIs。
与 NodeJS、Django 和 Flask 等框架不同,FastAPI 借助 Python 类型注解获得效率。Python 的类型提示可以消除运行时错误并增强 IDE 支持(code completion 等)。
FastAPI 非常快 (具有 Rust 的速度),并提供了自动化的 API 文档(基于 JSON Schema)。
2. 机器学习模型预测
2.1. 数据预处理
数据是机器学习模型的基础,可以根据实际需求,对数据进行清洗、切分、归一化等操作,为模型的输入提供满足条件的数据。
import pandas as pd
data = pd.read_csv('data.csv')
# 数据清洗
data = data.dropna(how='any', axis=0)
# 数据切分
train_data = data.iloc[:,:-1]
train_label = data.iloc[:, -1]
2.2. 模型训练
对数据预处理后,可以开始训练模型,以决策树模型为例:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# 数据切分
X_train, X_test, y_train, y_test = train_test_split(train_data, train_label, test_size=0.25)
# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
2.3. 模型预测
模型训练好后,可以使用模型预测数据,决策树模型为例:
# 数据预测
result = model.predict(X_test)
# 预测结果与真实结果的比对
print((result == y_test).sum() / result.shape[0])
3. 在FastAPI中使用机器学习模型进行数据预测
3.1. 安装依赖包
使用 FastAPI 进行部署的时候,需要安装 Requests、Pandas 和 Scikit-Learn 等 Python 库。
pip install -U fastapi
pip install -U uvicorn[standard]
pip install requests
pip install pandas
pip install scikit-learn
3.2. 编写接口
编写接口,以决策树模型为例,在 FastAPI 中接受输入,将输入传入模型进行预测,将预测结果返回。
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
x1: float
x2: float
x3: float
x4: float
app = FastAPI()
@app.post("/predict")
async def predict(item: Item):
data = {
'x1': [item.x1],
'x2': [item.x2],
'x3': [item.x3],
'x4': [item.x4]
}
data = pd.DataFrame(data)
# 预测
result = model.predict(data)
return {
'result': int(result[0])
}
3.3. 启动服务
启动服务,使用 HTTP 协议端口为8000,可以通过如下代码启动服务:
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=8000)
3.4. 使用 API 进行预测
使用 POST 请求,将数据发送给接口进行预测:
import requests
import json
url = 'http://127.0.0.1:8000/predict'
data = {
'x1': 4.2,
'x2': 3.1,
'x3': 1.5,
'x4': 0.2
}
response = requests.post(url, data=json.dumps(data))
print(response.json()['result'])
总结:FastAPI 是一款高性能的 Python Web 端框架,可以使用 FastAPI 进行机器学习模型的预测,提高模型的实时性。FastAPI 主要适用于项目需要高并发、低延迟的 API 端场景,因此需要在不降低性能的情况下提供良好的可维护性和可扩展性。