EJEMPLO DE ÁRBOL: ESTUDIO SOBRE DIAGNÓSTICOS DE ENDODONCIA EN MOLARES.

 


DIPLOMADO EN INTELIGENCIA ARTIFICIAL

                                                                   MODULO IV

              APRENDIZAJE AUTOMATICO CON PYTHON Y ASISTENTES INTELIGENTES

              Ortega Irusta Elsy Nilda

              Este es el chat GPT 

              https://chat.openai.com/c/2b970dc5-6381-43ae-a04a-8ccb1a26f316

EJEMPLO DE ÁRBOLES DE DECISIÓN EN EL CONTEXTO DE APRENDIZAJE SUPERVISADO

 CASO DE ESTUDIO SOBRE: DIAGNÓSTICOS DE ENDODONCIA EN MOLARES.

Vamos a aplicar los componentes del pensamiento computacional para desarrollar un ejemplo de Árboles de Decisión en el contexto de aprendizaje supervisado, con un caso de estudio sobre diagnósticos de endodoncia en molares. También abordaremos conceptos clave de la regresión logística.

1. DEFINICIÓN DEL PROBLEMA:

   - Problema: Diagnóstico de endodoncia en molares.

   - Objetivo: Desarrollar un modelo de aprendizaje supervisado para predecir si un molar necesita tratamiento de endodoncia o no.

2. Descomposición del Problema:

   - Identificar las características relevantes para el diagnóstico (p. ej., dolor, inflamación, historial dental).

   - Recolectar datos etiquetados: pacientes con diagnóstico de endodoncia y pacientes sin el tratamiento.

3. Patrones y Abstracciones:

   - Patrones: Relaciones entre síntomas y diagnósticos.

   - Abstracciones: Características clave que influyen en la necesidad de endodoncia.

4. Algoritmos y Modelos:

   - Utilizaremos Árboles de Decisión y Regresión Logística.

   - Árbol de Decisión: División del conjunto de datos basado en características para llegar a decisiones.

   - Regresión Logística: Modelo de regresión para problemas de clasificación binaria.

5. Implementación:

   - Dividir el conjunto de datos en entrenamiento y prueba.

   - Entrenar modelos de Árbol de Decisión y Regresión Logística.

6. Evaluación:

   - Evaluar la precisión, sensibilidad, especificidad y otras métricas del modelo utilizando datos de prueba. 

7. Iteración:

   - Ajustar parámetros del modelo para mejorar el rendimiento.

   - Considerar la posibilidad de agregar nuevas características o modificar las existentes.

8. Optimización:

   - Utilizar técnicas como la poda del árbol para evitar sobreajuste.

   - Ajustar híper parámetros para mejorar el rendimiento del modelo.

IMPLEMENTACIÓN PASÓ A PASO CON PYTHON:

Esta es mi interaccion con google colab

# Importar bibliotecas
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# Cargar datos
data = pd.read_csv('datos_endodoncia.csv')  # Asumiendo un conjunto de datos etiquetado

# Dividir datos en características (X) y etiquetas (y)
X = data.drop('Necesidad_Endodoncia', axis=1)
y = data['Necesidad_Endodoncia']

# Dividir datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Entrenar modelo de Árbol de Decisión
dt_model = DecisionTreeClassifier()
dt_model.fit(X_train, y_train)

# Evaluar modelo de Árbol de Decisión
y_pred_dt = dt_model.predict(X_test)
accuracy_dt = accuracy_score(y_test, y_pred_dt)
print("Precisión del Árbol de Decisión:", accuracy_dt)
print("Informe de clasificación del Árbol de Decisión:\n", classification_report(y_test, y_pred_dt))

# Entrenar modelo de Regresión Logística
lr_model = LogisticRegression()
lr_model.fit(X_train, y_train)

# Evaluar modelo de Regresión Logística
y_pred_lr = lr_model.predict(X_test)
accuracy_lr = accuracy_score(y_test, y_pred_lr)
print("Precisión de la Regresión Logística:", accuracy_lr)
print("Informe de clasificación de la Regresión Logística:\n", classification_report(y_test, y_pred_lr))

Este es un ejemplo simplificado. En un escenario real, se necesitará un análisis más detallado de datos, ingeniería de características y ajuste de híper parámetros para optimizar el rendimiento del modelo. Además, es fundamental comprender la importancia de las características y realizar la poda del árbol si es necesario para evitar el sobreajuste.

Ejemplo de árbol de decisiones de endodoncia en molares para hacerlo más comprensible para niños de 10 años. Imagina que eres un dentista y quieres ayudar a los niños a entender cuándo un molar necesita tratamiento de endodoncia. Utilizaremos un enfoque de Árbol de Decisiones de manera lúdica.

ÁRBOL DE DECISIONES PARA ENDODONCIA EN MOLARES DE NIÑOS:

1. Síntoma 1: Dolor de muelas.

      - ¿El niño tiene dolor de muelas?

      - Sí: Ve al siguiente pasó.

      - No: ¡Tu molar probablemente no necesita tratamiento de endodoncia!

2. Síntoma 2: Sensibilidad al frío o calor.

        - ¿El niño siente dolor al comer helado o beber algo caliente?

        - Sí: Ve al siguiente pasó.

        - No: ¡Tu molar probablemente no necesita tratamiento de endodoncia!

3. Síntoma 3: Hinchazón o enrojecimiento de las encías.

   - ¿Las encías alrededor del molar están hinchadas o rojas?

        - Sí: Puede que necesites tratamiento de endodoncia.

       - No: ¡Tu molar probablemente no necesita tratamiento de endodoncia!

4. Diagnóstico Final:

   - Si has experimentado dolor de muelas, sensibilidad al frío o calor, y tus encías están hinchadas, es posible que necesites ver a un dentista para evaluar si tu molar necesita tratamiento de endodoncia.

Este es un ejemplo muy básico y divertido para que los niños comprendan el concepto de un Árbol de Decisiones en el contexto de endodoncia. Puedes adaptar las preguntas y respuestas según lo consideres apropiado para la audiencia infantil. Recuerda siempre que la información médica debe ser proporcionada por profesionales de la salud.

Ejemplo simple de un Árbol de Decisiones en Python que refleje el árbol que describimos para los niños. Sin embargo, ten en cuenta que este código es más un ejercicio didáctico que una implementación realista para diagnósticos médicos.

Esta es mi interaccion con google colab

from sklearn.tree import DecisionTreeClassifier
import numpy as np

# Crear datos de ejemplo
# 1: Sí, 0: No
datos = np.array([
    [1, 1, 1, 1],  # Síntomas presentes
    [1, 1, 0, 1],  # Síntomas parciales
    [0, 0, 0, 0],  # Sin síntomas
    [1, 0, 1, 1],  # Otro caso
])

# Etiquetas
etiquetas = np.array([1, 0, 0, 1])  # 1: Necesita tratamiento, 0: No necesita tratamiento

# Crear el modelo de Árbol de Decisiones
modelo_arbol = DecisionTreeClassifier()

# Entrenar el modelo
modelo_arbol.fit(datos, etiquetas)

# Hacer una predicción para un nuevo caso
nuevo_caso = np.array([[1, 1, 1, 1]])  # Síntomas presentes
prediccion = modelo_arbol.predict(nuevo_caso)

# Mostrar el resultado
if prediccion[0] == 1:
    print("Tu molar podría necesitar tratamiento de endodoncia.")
else:
    print("Tu molar probablemente no necesita tratamiento de endodoncia.")
Tu molar podría necesitar tratamiento de endodoncia.

Recuerda, este código es solo una simulación y no debe utilizarse para diagnósticos reales de salud. En un entorno médico real, se necesitaría un conjunto de datos más grande y complejo, y la implementación sería realizada por profesionales de la salud. Este código es más para ilustrar cómo podría funcionar un Árbol de Decisiones en un contexto simple.

Ejemplos de Algoritmos: Regresión lineal.

Ejemplo de Árbol de Decisiones para Decidir si un Molar Necesita Endodoncia:

Crear un ejemplo de regresión lineal o árboles de decisión en el contexto específico de endodoncia en molares para niños de 10 años podría ser un poco complejo, ya que estos algoritmos están más orientados a problemas numéricos o clasificación que a diagnósticos médicos. Sin embargo, puedo proporcionarte un enfoque más conceptual adaptado para un caso ficticio y educativo.

Ejemplo de Regresión Lineal para Niveles de Dolor en Endodoncia:

Supongamos que queremos explorar la relación entre el tiempo que ha pasado desde que el niño experimentó dolor en su molar y la intensidad del dolor en una escala de 1 a 10.

Esta es mi interaccion con google colab

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


# Datos de ejemplo
tiempo_desde_dolor = np.array([0, 2, 4, 6, 8, 10])  # En días
intensidad_dolor = np.array([10, 8, 6, 4, 2, 1])   # En una escala de 1 a 10

# Reshape para que tenga el formato adecuado para scikit-learn
tiempo_desde_dolor = tiempo_desde_dolor.reshape(-1, 1)

# Crear el modelo de regresión lineal
modelo_regresion = LinearRegression()

# Entrenar el modelo
modelo_regresion.fit(tiempo_desde_dolor, intensidad_dolor)

# Hacer predicciones para nuevos tiempos desde el dolor
nuevos_tiempos = np.array([12, 14]).reshape(-1, 1)
predicciones = modelo_regresion.predict(nuevos_tiempos)

# Visualizar los resultados
plt.scatter(tiempo_desde_dolor, intensidad_dolor, color='blue', label='Datos de ejemplo')
plt.plot(nuevos_tiempos, predicciones, color='red', marker='o', linestyle='dashed', linewidth=2, markersize=8, label='Predicciones')
plt.title('Regresión Lineal: Intensidad del Dolor en Endodoncia vs. Tiempo desde el Dolor')
plt.xlabel('Tiempo desde el Dolor (días)')
plt.ylabel('Intensidad del Dolor (escala de 1 a 10)')
plt.legend()
plt.show()


Este es un ejemplo simplificado y conceptual. En situaciones reales, los datos serían más complejos y requerirían un análisis más detallado. Ahora, para un árbol de decisiones, el ejemplo sería más basado en preguntas y respuestas, pero la relación con endodoncia podría ser menos directa.

Ejemplo de Árbol de Decisiones para Decidir si un Molar Necesita Endodoncia:

Esta es mi interaccion con google colab

from sklearn.tree import DecisionTreeClassifier

# Datos de ejemplo
dolor = input("¿Sientes dolor en tu molar? (Sí/No): ").lower()
hinchazon = input("¿Tus encías están hinchadas? (Sí/No): ").lower()

# Convertir respuestas a valores binarios
dolor_binario = 1 if dolor == 'sí' else 0
hinchazon_binario = 1 if hinchazon == 'sí' else 0

# Crear un conjunto de datos ficticio
datos = np.array([[dolor_binario, hinchazon_binario]])

# Crear el modelo de Árbol de Decisiones
modelo_arbol = DecisionTreeClassifier()

# Entrenar el modelo (usando datos ficticios ya que es solo un ejemplo conceptual)
modelo_arbol.fit(datos, [1])  # Asumimos que 1 significa que necesita endodoncia

# Hacer una predicción para el caso del niño
nuevo_caso = np.array([[dolor_binario, hinchazon_binario]])
prediccion = modelo_arbol.predict(nuevo_caso)

# Mostrar el resultado
if prediccion[0] == 1:
    print("Podría ser necesario un tratamiento de endodoncia.")
else:
    print("Probablemente no necesitas tratamiento de endodoncia en este momento.")

Estos son ejemplos educativos y no deben utilizarse para tomar decisiones médicas. Para diagnósticos reales, siempre se debe consultar a un profesional de la salud.

Gráficas de regresión lineal y árboles de decisiones

Gráficas de regresión lineal y árboles de decisiones en el contexto de endodoncia en molares para niños de 10 años, debemos definir un escenario específico. Dado que los datos clínicos reales son más complejos y sensibles, crearemos un escenario ficticio y educativo.

Escenario Ficticio: Predicción de intensidad del dolor en endodoncia en niños.

Para desarrollar gráficas de regresión lineal y árboles de decisiones en el contexto de endodoncia en molares para niños de 10 años, debemos definir un escenario específico. Dado que los datos clínicos reales son más complejos y sensibles, crearemos un escenario ficticio y educativo.

Escenario Ficticio: Predicción de Intensidad del Dolor en Endodoncia en Niños.

Supongamos que queremos explorar la relación entre el tiempo que ha pasado desde que el niño experimentó dolor en su molar y la intensidad del dolor en una escala de 1 a 10 años de edad. Primero, crearemos datos ficticios y luego mostraremos tanto la regresión lineal como el árbol de decisiones.

Primero, crearemos datos ficticios y luego mostraremos tanto la regresión lineal como el árbol de decisiones.

Esta es mi interaccion con google colab

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

# Crear datos de ejemplo
np.random.seed(42)
tiempo_desde_endodoncia = np.random.randint(1, 30, size=(50, 1))  # Tiempo en días
frecuencia_cepillado = np.random.randint(1, 4, size=(50, 1))  # 1: Bajo, 2: Medio, 3: Alto

# Crear relación ficticia entre las variables
intensidad_dolor = tiempo_desde_endodoncia * 0.8 + frecuencia_cepillado * 5 + np.random.normal(0, 5, (50, 1))

# Reshape para que tenga el formato adecuado para scikit-learn
tiempo_desde_endodoncia = tiempo_desde_endodoncia.reshape(-1, 1)
frecuencia_cepillado = frecuencia_cepillado.reshape(-1, 1)

# Visualizar los datos
plt.scatter(tiempo_desde_endodoncia, intensidad_dolor, c=frecuencia_cepillado, cmap='viridis', label='Datos de ejemplo')
plt.title('Datos de Intensidad de Dolor en Endodoncia')
plt.xlabel('Tiempo desde la Endodoncia (días)')
plt.ylabel('Intensidad del Dolor')
plt.colorbar(label='Frecuencia de Cepillado')
plt.show()


Aquí, hemos creado datos ficticios con una relación lineal entre el tiempo desde la endodoncia, la frecuencia de cepillado y la intensidad del dolor. La frecuencia de cepillado se codifica mediante colores para visualizar la relación.

Ahora, implementemos tanto la regresión lineal como el árbol de decisiones.

Esta es mi interaccion con google colabEsta es mi interaccion con google colab

# Regresión Lineal
modelo_regresion = LinearRegression()
modelo_regresion.fit(np.concatenate([tiempo_desde_endodoncia, frecuencia_cepillado], axis=1), intensidad_dolor)

# Árbol de Decisiones
modelo_arbol = DecisionTreeRegressor()
modelo_arbol.fit(np.concatenate([tiempo_desde_endodoncia, frecuencia_cepillado], axis=1), intensidad_dolor)

# Hacer predicciones para una visualización más suave
nuevos_tiempos = np.linspace(1, 30, 100).reshape(-1, 1)
nueva_frecuencia = np.full_like(nuevos_tiempos, 2)  # Usamos frecuencia de cepillado media para la visualización
predicciones_regresion = modelo_regresion.predict(np.concatenate([nuevos_tiempos, nueva_frecuencia.reshape(-1, 1)], axis=1))
predicciones_arbol = modelo_arbol.predict(np.concatenate([nuevos_tiempos, nueva_frecuencia.reshape(-1, 1)], axis=1))

# Visualizar los resultados
plt.scatter(tiempo_desde_endodoncia, intensidad_dolor, c=frecuencia_cepillado, cmap='viridis', label='Datos de ejemplo')
plt.plot(nuevos_tiempos, predicciones_regresion, label='Regresión Lineal', color='red', linewidth=2)
plt.plot(nuevos_tiempos, predicciones_arbol, label='Árbol de Decisiones', color='green', linewidth=2, linestyle='dashed')
plt.title('Regresión Lineal vs. Árbol de Decisiones en Endodoncia')
plt.xlabel('Tiempo desde la Endodoncia (días)')
plt.ylabel('Intensidad del Dolor')
plt.colorbar(label='Frecuencia de Cepillado')
plt.legend()
plt.show()

Visualizacion tanto los datos ficticios como las predicciones de un modelo de regresión lineal y un árbol de decisiones. Recuerda que este es un escenario educativo y los datos y relaciones son completamente ficticios. En situaciones reales, la relación entre las variables sería más compleja y la recopilación de datos se realizaría de manera ética y cuidadosa.

Ejemplo sobre la intensidad del dolor en molares de niños después de un procedimiento de endodoncia. Crearemos datos ficticios para el tiempo desde el procedimiento y la frecuencia de cepillado dental, y luego visualizaremos una regresión lineal.

Esta es mi interaccion con google colab

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

# Crear datos de ejemplo
np.random.seed(42)
tiempo_desde_endodoncia = np.random.randint(1, 30, size=(50, 1))  # Tiempo en días
frecuencia_cepillado = np.random.randint(1, 4, size=(50, 1))  # 1: Bajo, 2: Medio, 3: Alto

# Crear relación ficticia entre las variables
intensidad_dolor = tiempo_desde_endodoncia * 0.8 + frecuencia_cepillado * 5 + np.random.normal(0, 5, (50, 1))

# Reshape para que tenga el formato adecuado para scikit-learn
tiempo_desde_endodoncia = tiempo_desde_endodoncia.reshape(-1, 1)
frecuencia_cepillado = frecuencia_cepillado.reshape(-1, 1)

# Crear el modelo de regresión lineal
modelo_regresion = LinearRegression()

# Entrenar el modelo
modelo_regresion.fit(np.concatenate([tiempo_desde_endodoncia, frecuencia_cepillado], axis=1), intensidad_dolor)

# Hacer predicciones para una visualización más suave
nuevos_tiempos = np.linspace(1, 30, 100).reshape(-1, 1)
nueva_frecuencia = np.full_like(nuevos_tiempos, 2)  # Usamos frecuencia de cepillado media para la visualización
predicciones_regresion = modelo_regresion.predict(np.concatenate([nuevos_tiempos, nueva_frecuencia.reshape(-1, 1)], axis=1))

# Visualizar los resultados
plt.scatter(tiempo_desde_endodoncia, intensidad_dolor, c=frecuencia_cepillado, cmap='viridis', label='Datos de ejemplo')
plt.plot(nuevos_tiempos, predicciones_regresion, label='Regresión Lineal', color='red', linewidth=2)
plt.title('Regresión Lineal en Intensidad de Dolor en Endodoncia')
plt.xlabel('Tiempo desde la Endodoncia (días)')
plt.ylabel('Intensidad del Dolor')
plt.colorbar(label='Frecuencia de Cepillado')
plt.legend()


Este ejemplo, estamos visualizando la relación entre el tiempo desde la endodoncia, la frecuencia de cepillado y la intensidad del dolor utilizando una regresión lineal. Recuerda que estos datos son ficticios y no deben interpretarse como datos clínicos reales.

Conclusiones y reflexiones: Fue importante poder conocer estas herramientas de árbol de decisiones (aprendizaje supervisado),  y el desarrollo de un modelo de árbol de decisiones para un caso de estudio de diagnóstico de endodoncia en molares y así implementar el uso de estas herramientas para mejorar nuestra práctica docente.



Comentarios

Entradas populares de este blog

REGRESIÓN LOGÍSTICA (APRENDIZAJE SUPERVISADO) USO DE MATERIALES DE ENDODONCIA PARA LA OBTURACION DE CONDUCTOS

TIPOS DE MALOCLUSION CLASE II DE ANGLE EN ODONTOLOGÍA: APLICACIÓN DEL ALGORITMO NAIVE BAYES EN APRENDIZAJE SUPERVISADO.

DIAGNÓSTICO EN PERIODONTITIS EN ODONTOLOGÍA: APLICACIÓN DEL ALGORITMO NAIVE BAYES EN APRENDIZAJE SUPERVISADO.