Un ejemplo práctico usando FastAPI y scikit-learn para crear y desplegar un modelo de clasificación de flores de iris en una API. Lo primero que debemos hacer es instalar todas las librerías necesarias. Para este ejemplo, necesitamos las librerías FastAPI, scikit-learn y uvicorn. Puedes instalarlos desde tu terminal con los siguientes comandos:
pip install fastapi
pip install scikit-learn
pip install uvicorn
Después de instalar las librerías, creamos una aplicación FastAPI que contenga una ruta que acepte los valores de los pétalos y sépalos de un iris, los use para predecir su especie y devuelva la predicción en formato JSON.
# Importamos las librerías necesarias
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np
# Declaramos la aplicación FastAPI
app = FastAPI()
# Creamos una clase para definir los parámetros que se deben enviar
class IrisData(BaseModel):
sepal_length: float
sepal_width: float
petal_length: float
petal_width: float
# Cargamos nuestro modelo de ML previamente creado con scikit-learn
model = joblib.load('model.joblib')
# Definimos la ruta del API
@app.post('/predict')
async def predict(data: IrisData):
# Convertimos los datos a un arreglo de NumPy
input_data = [data.sepal_length, data.sepal_width, data.petal_length, data.petal_width]
input_data = np.array(input_data).reshape(1, -1)
# Realizamos la predicción con nuestro modelo
prediction = model.predict(input_data)[0]
# Devolvemos la predicción en formato JSON
return {"prediction": prediction}
En este ejemplo, creamos una clase IrisData que define los nombres y tipos de datos que se deben enviar a través del API. Después, cargamos nuestro modelo de Machine Learning usando la librería joblib. Finalmente, definimos la ruta /predict que realiza la predicción y devuelve la respuesta en formato JSON.
Para probar nuestra aplicación, corremos el siguiente comando desde nuestra terminal:
uvicorn main:app --reload
Esto iniciará el servidor en http://localhost:8000/, a través del cual podremos enviar las peticiones al API. Usando herramientas como Postman, podemos enviar una petición POST con los valores de los pétalos y sépalos para realizar la predicción. Por ejemplo, podemos enviar la siguiente petición:
POST http://localhost:8000/predict
{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
}
Esto nos devolverá una respuesta en formato JSON con la predicción realizada por nuestro modelo:
{
"prediction": "setosa"
}
¡Y listo! Ahora hemos creado y desplegado un modelo de Machine Learning en una API usando FastAPI.