SVM Fashion-MNIST — API Flask
Proyecto que entrena un clasificador SVM + PCA sobre el dataset Fashion-MNIST y lo sirve como API REST con Flask.
Estructura del proyecto
svm_fashion_flask/
├── train_model.py ← Entrena y guarda los artefactos (.pkl)
├── app.py ← API Flask (endpoint de predicción)
├── test_api.py ← Script de prueba de los endpoints
├── requirements.txt
└── models/ ← Generado automáticamente por train_model.py
├── scaler.pkl
├── pca.pkl
└── svm_model.pkl
Instalación
# 1. Crear entorno virtual (recomendado)
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 2. Instalar dependencias
pip install -r requirements.txt
Uso
Paso 1 — Entrenar el modelo
python train_model.py
Descarga Fashion-MNIST, aplica PCA, busca hiperparámetros con GridSearchCV y guarda los artefactos en
models/.
Tiempo estimado: 10-30 min según el hardware.
La precisión objetivo es ≥ 90 %.
Paso 2 — Iniciar la API
python app.py
La API queda disponible en http://127.0.0.1:5000.
Paso 3 — Probar los endpoints
python test_api.py
Endpoints
GET /health
Verifica que la API y el modelo estén operativos.
{
"status": "ok",
"model_loaded": true,
"message": "API operativa"
}
GET /model/info
Metadatos del modelo cargado.
{
"model_type": "SVC",
"kernel": "rbf",
"C": 50,
"gamma": 0.01,
"classes": ["T-shirt/top", "Trouser", "..."],
"pca_components": 187,
"pca_variance_ratio": 0.9502,
"input_features": 784
}
POST /predict
Clasifica una imagen.
Body:
{
"pixels": [0, 128, 255, ...] // 784 valores enteros (0-255)
}
Respuesta:
{
"class_id": 7,
"class_name": "Sneaker",
"confidence": 0.9423,
"probabilities": {
"T-shirt/top": 0.01,
"Sneaker": 0.9423,
"..."
},
"inference_ms": 12.4
}
POST /predict/batch
Clasifica múltiples imágenes en una llamada.
Body:
{
"images": [
[0, 128, 255, ...],
[...]
]
}
Respuesta:
{
"results": [
{"class_id": 7, "class_name": "Sneaker", "confidence": 0.94},
{"class_id": 1, "class_name": "Trouser", "confidence": 0.88}
],
"count": 2,
"inference_ms": 25.1
}
Clases Fashion-MNIST
| ID | Nombre |
|---|---|
| 0 | T-shirt/top |
| 1 | Trouser |
| 2 | Pullover |
| 3 | Dress |
| 4 | Coat |
| 5 | Sandal |
| 6 | Shirt |
| 7 | Sneaker |
| 8 | Bag |
| 9 | Ankle boot |
Notas técnicas
- Split 80 % entrenamiento / 20 % prueba sobre 30 000 muestras estratificadas.
- PCA conserva el 95 % de la varianza (~180-200 componentes).
- GridSearchCV con
C ∈ {10, 50},gamma ∈ {0.001, 0.01}, kernelrbf, cv=3. SVC(probability=True)habilita scores de confianza por clase.
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support