# -*- coding: utf-8 -*-
"""
ESP32_DIABETES_PREDICT.ipynb
Este código entrena un modelo de árbol de decisión para predecir diabetes utilizando datos de un archivo CSV.
El modelo se convierte en código C para integrarlo en proyectos embebidos como ESP32.
"""
# Importar librerías necesarias
import pandas as pd # Para manipulación de datos
from sklearn.model_selection import train_test_split # Para dividir los datos en entrenamiento y prueba
from sklearn.tree import DecisionTreeClassifier # Algoritmo de Árbol de Decisión
from micromlgen import port # Para convertir el modelo a código C/C++
# Cargar el archivo CSV con los datos de diabetes
# Asegúrate de que el archivo esté disponible en el directorio de trabajo
diabetes = pd.read_csv('/content/diabetes.csv') # Ruta del archivo
# Preparar los datos para entrenamiento y prueba
# Dividimos las columnas en características (X) y la salida (Y, que es 'Outcome')
x_train, x_test, y_train, y_test = train_test_split(
diabetes.loc[:, diabetes.columns != 'Outcome'], # Todas las columnas menos 'Outcome' son características
diabetes['Outcome'], # La columna 'Outcome' es el objetivo (0 o 1)
stratify=diabetes['Outcome'], # Mantener la proporción de clases
random_state=66 # Semilla para reproducibilidad
)
# Entrenamiento del modelo
model = DecisionTreeClassifier() # Crear una instancia del clasificador
model.fit(x_train, y_train) # Ajustar el modelo con los datos de entrenamiento
# Exportar el modelo entrenado a código C
c_code = port(model) # Convertir el modelo a código compatible con C/C++
print(c_code) # Imprimir el código generado
# Agregar una sección para ingresar datos de una persona
print("\n### SECCIÓN DE PRUEBA ###")
print("Ingrese los datos de la persona para predecir el diagnóstico de diabetes.")
# Ejemplo de características para una persona (puedes cambiar estos valores)
persona = {
"Pregnancies": int(input("Número de embarazos: ")),
"Glucose": float(input("Nivel de glucosa: ")),
"BloodPressure": float(input("Presión arterial: ")),
"SkinThickness": float(input("Grosor de la piel: ")),
"Insulin": float(input("Nivel de insulina: ")),
"BMI": float(input("Índice de masa corporal (BMI): ")),
"DiabetesPedigreeFunction": float(input("Función de pedigrí de diabetes: ")),
"Age": int(input("Edad: "))
}
# Convertir los datos de la persona a un DataFrame para hacer predicciones
import numpy as np
persona_df = pd.DataFrame([persona])
prediccion = model.predict(persona_df) # Predecir si tiene o no diabetes
# Mostrar el resultado
if prediccion[0] == 1:
print("El modelo predice que esta persona TIENE diabetes.")
else:
print("El modelo predice que esta persona NO tiene diabetes.")
# Nota para Wokwi: Usa el código C generado con 'micromlgen' y carga los valores de entrada