MODULO IV APLICACIÓN PRÁCTICA: NAIVE BAYES (APRENDIZAJE SUPERVISADO) DIAGNÓSTICO DE GINGIVITIS

                                                                  DIPLOMA DO

                                       EN INTELIGENCIA ARTIFICIAL

                                                               MODULO IV  

              APRENDIZAJE AUTOMATICO CON PYTHON Y ASISTENTES INTELIGENTES

Ortega Irusta Mireya Elena

Interaccion con chat GPT

https://chat.openai.com/share/2244f090-c91d-4710-bf6c-b84a554b14ae




El proceso de pensamiento computacional para el desarrollo de un ejemplo de aplicación práctica de Naive Bayes, junto con algunos conceptos clave de la regresión logística.

Pensamiento Computacional para Naive Bayes:

1. Abstracción:

   - Definición del Problema: Supongamos que queremos crear un clasificador para determinar si          un correo electrónico es spam o no spam basándonos en ciertas palabras clave.

   -  Identificación de Componentes:

    - Entradas: Conjunto de palabras en el correo electrónico.

    - Salidas: Clasificación del correo como spam o no spam.

    - Decisión de Algoritmo: Naive Bayes para clasificación.

2. Descomposición:

    - División de Tareas:

    - Recopilar datos de entrenamiento etiquetados (correos etiquetados como spam o no spam).

    - Preprocesar los datos (limpieza, tokenización, eliminación de stopwords, etc.).

    - Entrenar el modelo Naive Bayes.

    - Evaluar el rendimiento del modelo.

 3. Reconocimiento de Patrones:

 - Teorema de Bayes:

  - Explica cómo actualizar la probabilidad de un evento dado el conocimiento previo de condiciones relacionadas.

  - Enfoque Naive:

   - Supone independencia entre las características/palabras del correo electrónico, simplificando los         cálculos.

 4. Algoritmos:

 - Naive Bayes (Aprendizaje Supervisado):

 - Utiliza la probabilidad condicional para clasificar nuevos ejemplos.

 - Calcula la probabilidad de que un correo sea spam o no spam dadas las palabras presentes en él.

Regresión Logística:

Conceptos Clave:

-Modelo de Regresión Logística:

 - Se utiliza para problemas de clasificación binaria.

  - Calcula la probabilidad de que un evento pertenezca a una clase usando una función logística.

- Suposiciones:

 - Relación lineal entre las características y la probabilidad logarítmica de la clase.

- Independencia de errores.

   - imitaciones:

 - Requiere una relación lineal entre las características y el logaritmo de las probabilidades de clase, lo que podría ser limitante en algunos casos.

  - No funciona bien con datos no lineales.

Suposiciones y Limitaciones del Modelo Naive Bayes:

 - Suposiciones:

  - Independencia condicional: asume que las características son independientes entre sí dada la clase.

  - Facilita los cálculos, pero puede no ser realista en todos los casos.

   - Limitaciones:

    - Sensible a datos de entrenamiento limitados.

- Si las palabras/clasificaciones no son independientes, el modelo puede dar resultados incorrectos.

Ejemplo de Pasos de Implementación:

        1. Preparación de Datos:

         - Recopilar y etiquetar correos como spam o no spam.

          - Limpieza y preprocesamiento de texto.

        2. Entrenamiento del Modelo:

   - Calcular las probabilidades condicionales de las palabras dado un spam o no spa

3. Clasificación de Nuevos Correos:

   - Utilizar el modelo entrenado para predecir si un nuevo correo es spam o no spam basado en la   probabilidad calculada.

4. Evaluación del Modelo:

 - Medir la precisión, el recall, la precisión y otras métricas para evaluar qué tan bien el modelo clasifica los correos.

Naive Bayes y la regresión logística son dos enfoques distintos para problemas de clasificación, cada uno con sus propias suposiciones y aplicaciones. En el caso de Naive Bayes, la suposición de independencia condicional puede simplificar el modelo, pero también puede no reflejar la realidad en todos los casos, mientras que la regresión logística asume una relación lineal entre características y probabilidades de clase.

 -La gingivitis es una enfermedad común de las encías que generalmente se caracteriza por la inflamación de las encías debido a la acumulación de placa bacteriana. Aquí tienes un diagnóstico típico de la gingivitis en odontología:

 

        DIAGNÓSTICO DE GINGIVITIS



 

1. Historial Médico y Dental:

   - El odontólogo realizará preguntas sobre los síntomas, la historia dental, hábitos de higiene bucal, y antecedentes médicos generales.

 

 2. Examen Físico:

   - Inspección Visual: El odontólogo examinará tus encías en busca de signos de inflamación, enrojecimiento, hinchazón y sangrado.

   - Sondaje Periodontal: Se usa una sonda para medir la profundidad de las bolsas periodontales (espacios entre las encías y los dientes).

 

3. Evaluación de Síntomas y Signos:

   - Sangrado de Encías: Uno de los signos más comunes de gingivitis es el sangrado al cepillarse o al usar hilo dental.

   - Enrojecimiento e Hinchazón: Las encías inflamadas pueden parecer rojas, hinchadas y sensibles.

   - Mal Aliento: La gingivitis puede causar mal aliento persistente.

 

4. Evaluación de Factores de Riesgo:

   - Hábitos de Higiene Bucal: Se evalúa la técnica de cepillado y uso del hilo dental.

   - Tabaquismo: El tabaquismo puede aumentar el riesgo de gingivitis.

   - Dieta : La dieta alta en azúcar puede contribuir a la acumulación de placa.

 

5. Radiografías (Opcional en casos avanzados):

   - En algunos casos, se pueden realizar radiografías para evaluar la salud ósea y detectar posibles signos de enfermedad periodontal avanzada.

 

6. Diagnóstico y Plan de Tratamiento:

   - Confirmación de Gingivitis: Basado en los signos y síntomas observados.

   - Educación y Recomendaciones: El odontólogo explicará cómo mejorar la higiene bucal y proporcionará pautas para el cuidado en el hogar.

   - Tratamiento: Puede incluir limpieza profesional, eliminación de placa y sarro, y en casos más graves, puede requerir terapia periodontal adicional.

 

Importancia del Diagnóstico Temprano:

Ejecutado este código tenemos los siguientes resultados.

Python


import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Datos de ejemplo (x: variable independiente, y: variable dependiente)
x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # reshape(-1, 1) convierte el array a una columna
y = np.array([2, 4, 5, 4, 5])

# Crear y entrenar el modelo de regresión lineal
modelo = LinearRegression()
modelo.fit(x, y)

# Realizar predicciones con el modelo entrenado
x_prediccion = np.array([6, 7, 8]).reshape(-1, 1)
y_prediccion = modelo.predict(x_prediccion)

# Coeficientes del modelo
print("Coeficiente de pendiente:", modelo.coef_[0])
print("Término independiente:", modelo.intercept_)

# Visualización de los datos y la línea de regresión
plt.scatter(x, y, color='blue', label='Datos')
plt.plot(x, modelo.predict(x), color='red', label='Línea de Regresión')
plt.scatter(x_prediccion, y_prediccion, color='green', label='Predicciones')
plt.xlabel('Variable Independiente')
plt.ylabel('Variable Dependiente')
plt.legend()
plt.show()

Interacción con Google colab:



 Python


from sklearn.tree import DecisionTreeClassifier, export_text

import pandas as pd

# Crear un conjunto de datos de ejemplo
data = {
    'Edad': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
    'Frecuencia_Cepillado': [2, 3, 1, 2, 3, 1, 2, 3, 1, 2],
    'Sangrado_Cepillado': ['no', 'sí', 'no', 'sí', 'no', 'no', 'sí', 'no', 'no', 'sí'],
    'Mal_Aliento': ['sí', 'no', 'no', 'sí', 'sí', 'no', 'no', 'sí', 'no', 'sí'],
    'Gingivitis': ['no', 'no', 'no', 'sí', 'sí', 'no', 'sí', 'sí', 'no', 'sí']
}

df = pd.DataFrame(data)

# Separar características (X) y etiquetas (y)
X = df.drop('Gingivitis', axis=1)
y = df['Gingivitis']

# Convertir variables categóricas a variables dummy (si es necesario)
X = pd.get_dummies(X, columns=['Sangrado_Cepillado', 'Mal_Aliento'], drop_first=True)

# Crear y entrenar el modelo de árbol de decisiones
modelo_arbol = DecisionTreeClassifier()
modelo_arbol.fit(X, y)

# Visualizar el árbol de decisiones
tree_rules = export_text(modelo_arbol, feature_names=list(X.columns))
print("Árbol de Decisiones:")
print(tree_rules)

Interacción con Google colab:

Árbol de Decisiones: |--- Frecuencia_Cepillado <= 1.50 | |--- class: no |--- Frecuencia_Cepillado > 1.50 | |--- Edad <= 35.00 | | |--- class: no | |--- Edad > 35.00 | | |--- class: sí

Aquí está el código actualizado con gráficos:
Arbol de decisiones clasifica los datos. Usaremos una representación simplificada debido a la complejidad de visualizar árboles de decisión más grandes. Para hacerlo, usaremos solo dos características y graficaremos las decisiones del árbol en un plano bidimensional.
Python

from sklearn.tree import DecisionTreeClassifier, export_text
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

# Crear un conjunto de datos de ejemplo
data = {
    'Frecuencia_Cepillado': [2, 3, 1, 2, 3, 1, 2, 3, 1, 2],
    'Sangrado_Cepillado': ['no', 'sí', 'no', 'sí', 'no', 'no', 'sí', 'no', 'no', 'sí'],
    'Gingivitis': ['no', 'no', 'no', 'sí', 'sí', 'no', 'sí', 'sí', 'no', 'sí']
}

df = pd.DataFrame(data)

# Separar características (X) y etiquetas (y)
X = df.drop('Gingivitis', axis=1)
y = df['Gingivitis']

# Convertir variables categóricas a variables dummy (si es necesario)
X = pd.get_dummies(X, columns=['Sangrado_Cepillado'], drop_first=True)

# Crear y entrenar el modelo de árbol de decisiones
modelo_arbol = DecisionTreeClassifier()
modelo_arbol.fit(X, y)

# Visualizar el árbol de decisiones (texto)
tree_rules = export_text(modelo_arbol, feature_names=list(X.columns))
print("Árbol de Decisiones:")
print(tree_rules)

# Visualizar el árbol de decisiones (gráfico)
plt.figure(figsize=(10, 6))
plot_tree(modelo_arbol, feature_names=X.columns, class_names=['No Gingivitis', 'Gingivitis'], filled=True)
plt.show()

Árbol de Decisiones: |--- Frecuencia_Cepillado <= 1.50 | |--- class: no |--- Frecuencia_Cepillado > 1.50 | |--- Frecuencia_Cepillado <= 2.50 | | |--- Sangrado_Cepillado_sí <= 0.50 | | | |--- class: no | | |--- Sangrado_Cepillado_sí > 0.50 | | | |--- class: sí | |--- Frecuencia_Cepillado > 2.50 | | |--- Sangrado_Cepillado_sí <= 0.50 | | | |--- class: sí | | |--- Sangrado_Cepillado_sí > 0.50 | | | |--- class: no



Python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix

# Creación de datos simulados
np.random.seed(42)
# Características simuladas: Sangrado (0 o 1), Placa (0 o 1)
X = np.random.randint(2, size=(100, 2))
# Etiqueta simulada: Gingivitis (1) o No Gingivitis (0)
y = np.random.randint(2, size=(100,))

# División de datos en conjuntos de entrenamiento y prueba
X_entrenamiento, X_prueba, y_entrenamiento, y_prueba = train_test_split(X, y, test_size=0.2, random_state=42)

# Inicialización del modelo de regresión logística
modelo_logistico = LogisticRegression()

# Entrenamiento del modelo
modelo_logistico.fit(X_entrenamiento, y_entrenamiento)

# Realización de predicciones en el conjunto de prueba
predicciones = modelo_logistico.predict(X_prueba)

# Evaluación del modelo
precision = accuracy_score(y_prueba, predicciones)
matriz_confusion = confusion_matrix(y_prueba, predicciones)

# Visualización de resultados
plt.figure(figsize=(8, 4))

# Gráfico de dispersión de los datos
plt.scatter(X_prueba[:, 0], X_prueba[:, 1], c=y_prueba, cmap='viridis', label='Datos')
plt.xlabel('Sangrado')
plt.ylabel('Placa')
plt.title('Diagnóstico de Gingivitis')
plt.legend()

# Gráfico de la frontera de decisión del modelo
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = modelo_logistico.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap='viridis', alpha=0.5)
plt.show()

# Resultados
print(f"Precisión del modelo: {precision}")
print("Matriz de Confusión:")
print(matriz_confusion)




La detección temprana y el tratamiento de la gingivitis son fundamentales para prevenir su progresión a una enfermedad periodontal más grave. Mantener una buena higiene bucal, realizar visitas regulares al odontólogo y adoptar hábitos saludables son clave para prevenir y controlar la gingivitis.

Este código generará una representación gráfica del árbol de decisiones basado en las características de la frecuencia de cepillado y si hay o no sangrado al cepillarse. Este árbol de decisiones simplificado te mostrará cómo se toman las decisiones para clasificar si un paciente tiene o no gingivitis. Recuerda que en un contexto real, con más características y datos, el árbol puede ser mucho más complejo.

Conclusiones y reflexiones:  Es de gran importancia poder conocer estas herramientas de Naivi Bayes (aprendizaje supervisado),   para un caso de estudio de diagnóstico de gingivitis, detección temprana y el tratamiento y poder  prevenir su progresión a una enfermedad periodontal. 

Naive Bayes es conocido por su eficiencia en la clasificación incluso con conjuntos de datos más pequeños. En el diagnóstico de gingivitis, puede ser útil para identificar patrones entre los síntomas y las condiciones de los pacientes, facilitando así una clasificación precisa. Estas herramietas nos au mejorar nuestra práctica docente.

Comentarios

Entradas populares de este blog

MODULO IV CLASIFICACIÓN DE CARIES DENTAL SEGÚN LA METODOLOGÍA DE BLACK.

MODULO IV DATASET SOBRE EL RENDIMIENTO DE ESTUDIANTES EN UN EXAMEN

MODULO IV APLICACIÓN PRÁCTICA: REGRESIÓN LOGÍSTICA (APRENDIZAJE SUPERVISADO) EJEMPLO DE REGRESIÓN LOGÍSTICA PARA PREDECIR EL ESTADO DE SALUD BASADO EN EL ÍNDICE DE MASA CORPORAL (IMC).