CoolFace
Apppublic

iabd06/Trabajo_evaluable_SBD_Hugging_Face_Clasificador_de_la_calidad_del_agua

sourceHugging Facecc-by-nc-4.0updated 1y agoView on Hugging Face
0likes
App README

Clasificador de Calidad del Agua

Descripción del Proyecto

El objetivo de este proyecto es evaluar la calidad del agua a partir de parámetros clave como la temperatura, el pH, la turbidez y los contaminantes. Se busca clasificar el agua en diferentes categorías de calidad, que van desde "Excelente" hasta "Peligrosa", para proporcionar una evaluación rápida y precisa de su estado.

Funcionamiento del Sistema

El modelo (`iabd06/Clasificador_de_la_calidad_del_agua`) se entrena con un conjunto de datos (`iabd06/agua_dataset`) que incluye información sobre varios parámetros del agua, como:

  • —Temperatura: medida en grados Celsius.
  • —pH: el nivel de acidez o alcalinidad del agua.
  • —Turbidez: la medida de la claridad del agua.
  • —Contaminantes: un valor que clasifica el agua según su nivel de contaminación.

El modelo de machine learning predice la calidad del agua, asignándola a una de las siguientes categorías:

  • —Excelente
  • —Muy buena
  • —Buena
  • —Regular
  • —Pobre
  • —Contaminada
  • —Peligrosa

El sistema utiliza un clasificador basado en Support Vector Machines (SVM), un algoritmo popular para problemas de clasificación. El modelo se entrena para identificar patrones en los datos, y es capaz de predecir la calidad del agua en función de los valores proporcionados.

Resultados y Explicación

A continuación se presentan ejemplos visuales de los resultados obtenidos por el modelo en función de los valores de entrada:

Resultado Excelente

[image] Descripción: El agua es clasificada como "Excelente" cuando tiene baja turbidez (menos de 2 NTU), un pH cercano a 7 y temperaturas bajas (menos de 20°C). Esto indica que el agua es clara, bien equilibrada y fresca, apta para consumo y uso.

Resultado Regular

[image] Descripción: En el caso de valores moderados de turbidez, pH y temperatura, el agua puede ser clasificada como "Regular". Esto podría indicar que es potable pero presenta algunas características que no son ideales para el consumo frecuente.

Resultado Contaminada

[image] Descripción: Cuando la turbidez es alta (más de 12 NTU) y el pH está fuera de los valores saludables (menos de 5 o más de 9), el agua puede ser clasificada como "Contaminada". Esto indica que el agua presenta niveles significativos de contaminantes que pueden afectar la salud, aunque no sea inmediatamente peligrosa para el consumo.

Proceso de Despliegue

El proceso de despliegue de este sistema consiste en varios pasos esenciales que se explican a continuación, en función del código del archivo Python:

  1. 1.Importación de Librerías:

Primero, se importan las librerías necesarias. gradio se utiliza para crear la interfaz gráfica de usuario (GUI) que permitirá a los usuarios interactuar con el modelo de manera sencilla. joblib se usa para cargar los archivos previamente guardados del modelo, el escalador y el codificador.

python
  import gradio as gr
  import joblib
  from huggingface_hub import hf_hub_download
  1. 1.Cargar el Modelo, el Escalador y el Codificador:

Aquí se cargan tres archivos guardados previamente:

  • —El archivo clasificador_de_agua_modelo_svm.pkl contiene el modelo de machine learning entrenado.
  • —scaler.pkl es el archivo que contiene el objeto de escalado que se utilizó para normalizar las características durante el entrenamiento del modelo.
  • —ordinal_encoder.pkl es el archivo con el codificador utilizado para convertir las variables categóricas (como el nivel de contaminantes) en valores numéricos que el modelo puede interpretar.
python
  model_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="clasificador_de_agua_modelo_svm.pkl")
  scaler_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="scaler.pkl")
  encoder_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="ordinal_encoder.pkl")
  
  model = joblib.load(model_path)
  scaler = joblib.load(scaler_path)
  encoder = joblib.load(encoder_path)
  1. 1.Definir la Función de Predicción:

Esta función toma los valores ingresados por el usuario (pH, turbidez, temperatura y nivel de contaminantes) y los procesa de la siguiente manera:

  • —El nivel de contaminantes se codifica en un formato numérico utilizando el codificador cargado previamente.
  • —Se crean los datos de entrada, que son escalados usando el escalador.
  • —El modelo hace la predicción sobre los datos escalados.
  • —Finalmente, la predicción se imprime en la consola para su verificación y se devuelve el resultado como una cadena.
python
  def predecir(pH, turbidez, temperatura, contaminantes):
      contaminantes_codificado = encoder.transform([[contaminantes]])[0][0]  
      input_data = [[temperatura, pH, turbidez, contaminantes_codificado]]
      input_scaled = scaler.transform(input_data) 
      resultado = model.predict(input_scaled)  
      
      print(f"Resultado crudo del modelo: {resultado[0]}")
      
      return str(resultado[0])
  1. 1.Crear la Interfaz Gráfica de Usuario (GUI):

Aquí se define la interfaz gráfica utilizando gr.Interface:

  • —fn=predecir: La función que se ejecutará cuando el usuario ingrese los datos.
  • —inputs: Se especifican los tipos de entrada que el usuario debe proporcionar (números para pH, turbidez y temperatura, y un desplegable para el nivel de contaminantes).
  • —outputs: Se define que la salida será un cuadro de texto que mostrará el resultado de la predicción.
  • —title y description: Se añaden el título y la descripción de la interfaz para guiar al usuario.
python
  iface = gr.Interface(
      fn=predecir,
      inputs=[
          gr.Number(label="pH", value=7.0, minimum=3.0, maximum=10.0),
          gr.Number(label="Turbidez (NTU)", value=5.0, minimum=0.0, maximum=15.0),
          gr.Number(label="Temperatura (°C)", value=25.0, minimum=0.0, maximum=40.0),
          gr.Dropdown(label="Nivel de Contaminantes", choices=["Malo", "Regular", "Bueno", "Muy Bueno"], value="Bueno")
      ],
      outputs=gr.Textbox(label="Resultado"),
      title="🧪 Clasificador de Calidad del Agua",
      description="Introduce los valores del agua para estimar su calidad. Los rangos válidos son pH (3–10), Turbidez (0–15) y Temperatura (0–40 °C)."
  )
  1. 1.Lanzar la Interfaz de Usuario:

Finalmente, se lanza la interfaz, lo que hace que la aplicación esté disponible en un navegador web para que los usuarios puedan interactuar con ella.

python
  iface.launch()

Reflexión Final

El modelo tiene un F1 Score de 74.2%, lo que significa que, en general, suele acertar en la mayoría de las predicciones, lo cual es un buen indicio de que su desempeño es bastante sólido. A pesar de esto, sé que aún hay margen de mejora, especialmente cuando se trata de diferenciar algunas clases que son más similares entre sí. Esto podría mejorar ajustando algunos parámetros del modelo o entrenando con un conjunto de datos más amplio y diverso, lo que ayudaría a afinar las predicciones y hacerlo más preciso.

Licencia

Este proyecto está licenciado bajo la licencia CC BY-NC 4.0.