Cesar017 commited on
Commit
ec143bf
·
verified ·
1 Parent(s): 4fa0fed

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +180 -10
README.md CHANGED
@@ -1,13 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- title: Final Redes Neuronales
3
- emoji: 🚀
4
- colorFrom: yellow
5
- colorTo: red
6
- sdk: gradio
7
- sdk_version: 6.8.0
8
- app_file: app.py
9
- pinned: false
10
- short_description: 'Sistema de Detección de Intrusos (IDS) con Redes Neuronales '
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # 🛡️ IDS con Redes Neuronales — NSL-KDD
2
+
3
+ **Proyecto Final | Materia: Redes Neuronales | Estudiante: César Núñez**
4
+
5
+ Sistema de Detección de Intrusos (IDS) que clasifica tráfico de red usando dos modelos:
6
+ - **MLP Base**: Clasificación binaria (Normal vs Ataque).
7
+ - **Transfer Learning**: Clasificación multiclase en 5 categorías (Normal / DoS / Probe / R2L / U2R).
8
+
9
+ ---
10
+
11
+ ## 📁 Estructura del proyecto
12
+
13
+ ```
14
+ proyecto_ids/
15
+
16
+ ├── app/
17
+ │ └── main.py # API REST con FastAPI
18
+
19
+ ├── notebooks/
20
+ │ └── entrenamiento.ipynb # Pipeline completo: EDA → preprocesamiento → modelos → métricas
21
+
22
+ ├── models/ # Artefactos generados por el notebook (NO subir a Git)
23
+ │ ├── modelo_base.keras
24
+ │ ├── modelo_transfer.keras
25
+ │ ├── scaler.joblib
26
+ │ └── encoders.joblib
27
+
28
+ ├── data/ # Dataset NSL-KDD (NO subir a Git)
29
+ │ ├── train.csv
30
+ │ └── test.csv
31
+
32
+ ├── gradio_app.py # Interfaz visual Gradio
33
+ ├── Dockerfile # Imagen del servicio API
34
+ ├── Dockerfile.gradio # Imagen del servicio Gradio
35
+ ├── docker-compose.yml # Orquestación de ambos servicios
36
+ ├── requirements.txt # Dependencias API
37
+ ├── requirements.gradio.txt # Dependencias Gradio
38
+ └── .gitignore
39
+ ```
40
+
41
+ ---
42
+
43
+ ## 🚀 Cómo ejecutar
44
+
45
+ ### ✅ Opción 1 — Docker Compose (recomendado)
46
+
47
+ ```bash
48
+ # 1. Asegurarse de tener la carpeta models/ con los artefactos del notebook
49
+ # 2. Construir y levantar ambos servicios
50
+ docker compose up --build
51
+
52
+ # La API estará disponible en: http://localhost:8000
53
+ # La interfaz Gradio estará en: http://localhost:7860
54
+ # La documentación Swagger en: http://localhost:8000/docs
55
+ ```
56
+
57
+ ### ⚙️ Opción 2 — Ejecución manual (desarrollo)
58
+
59
+ ```bash
60
+ # Crear y activar entorno virtual
61
+ python -m venv venv
62
+ source venv/bin/activate # Linux/Mac
63
+ venv\Scripts\activate # Windows
64
+
65
+ # Instalar dependencias
66
+ pip install -r requirements.txt
67
+ pip install gradio requests
68
+
69
+ # Terminal 1: levantar la API
70
+ uvicorn app.main:app --reload --port 8000
71
+
72
+ # Terminal 2: levantar la interfaz
73
+ python gradio_app.py
74
+ ```
75
+
76
+ ### 📓 Opción 3 — Solo el notebook
77
+
78
+ ```bash
79
+ pip install -r requirements.txt jupyter
80
+ jupyter notebook notebooks/entrenamiento.ipynb
81
+ # Ejecutar todas las celdas en orden (Kernel → Restart & Run All)
82
+ ```
83
+
84
  ---
85
+
86
+ ## 📡 Endpoints de la API
87
+
88
+ | Método | Endpoint | Descripción |
89
+ |--------|-----------------------|------------------------------------------|
90
+ | GET | `/` | Bienvenida y health check básico |
91
+ | GET | `/health` | Verifica que los modelos estén cargados |
92
+ | POST | `/predict/binary` | Normal vs Ataque (MLP Base) |
93
+ | POST | `/predict/multiclass` | 5 categorías (Transfer Learning) |
94
+ | GET | `/docs` | Documentación interactiva Swagger UI |
95
+
96
+ ### Ejemplo de uso con `curl`
97
+
98
+ ```bash
99
+ curl -X POST http://localhost:8000/predict/binary \
100
+ -H "Content-Type: application/json" \
101
+ -d '{"features": [0,2,30,10,491,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,1,0,0,150,25,0.17,0.03,0.17,0,0.01,0.06,0,0]}'
102
+ ```
103
+
104
+ ### Respuesta esperada
105
+
106
+ ```json
107
+ {
108
+ "prediction": "Tráfico Normal ✅",
109
+ "probability": 0.0312,
110
+ "confidence": "96.9%",
111
+ "mode": "binary",
112
+ "status": "success"
113
+ }
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 🔧 Obtener el dataset NSL-KDD
119
+
120
+ ```bash
121
+ # Descargar desde la fuente oficial
122
+ wget https://www.unb.ca/cic/datasets/nsl.html
123
+ # O usar la versión de Kaggle: search "NSL-KDD dataset"
124
+
125
+ # Colocar los archivos en:
126
+ mkdir -p data/
127
+ # data/train.csv → KDDTrain+.txt (renombrar y mover)
128
+ # data/test.csv → KDDTest+.txt (renombrar y mover)
129
+ ```
130
+
131
+ ---
132
+
133
+ ## 📊 Dataset — NSL-KDD
134
+
135
+ | Característica | Valor |
136
+ |---------------------|------------------------------|
137
+ | Registros Train | ~125,973 |
138
+ | Registros Test | ~22,544 |
139
+ | Variables (features)| 41 |
140
+ | Clases binarias | Normal / Ataque |
141
+ | Clases multiclase | Normal, DoS, Probe, R2L, U2R |
142
+ | Año de referencia | 1999 (benchmark académico) |
143
+
144
+ ---
145
+
146
+ ## ⚙️ Stack tecnológico
147
+
148
+ | Componente | Tecnología |
149
+ |-----------------|-----------------------------|
150
+ | Modelos | TensorFlow / Keras |
151
+ | Preprocesamiento| Scikit-learn |
152
+ | API REST | FastAPI + Uvicorn |
153
+ | Interfaz visual | Gradio |
154
+ | Contenerización | Docker + Docker Compose |
155
+ | Control versiones| Git + GitHub |
156
+
157
+ ---
158
+
159
+ ## .gitignore recomendado
160
+
161
+ ```gitignore
162
+ # Modelos entrenados (archivos pesados)
163
+ models/*.keras
164
+ models/*.joblib
165
+ models/*.h5
166
+ models/*.png
167
+
168
+ # Dataset
169
+ data/
170
+
171
+ # Entorno virtual
172
+ venv/
173
+ __pycache__/
174
+ *.pyc
175
+ .ipynb_checkpoints/
176
+
177
+ # Variables de entorno
178
+ .env
179
+ ```
180
+
181
  ---
182
 
183
+ *César Núñez Proyecto Final, Materia: Redes Neuronales*